首页 > 代码库 > 加州理工学院公开课:机器学习与数据挖掘_训练与测试(第五课)

加州理工学院公开课:机器学习与数据挖掘_训练与测试(第五课)

课程简介:

 本视频为机器学习系列课程第5章。主要定量研究训练与测试之间的关系,并引入学习模型中的一个重要概念--断点。课程深入浅出,从正射线、正区间和凸集三个具体例子入手,寻找突破点,从而得出训练集与测试集的关系。

课程大纲(Outline):

1、从训练到测试(From Training to Testing)

2、举例说明(Illustrative Examples )

3、关键概念---- 断点(Key Notion --- Break Point )

4、难题(Puzzle)


1、从训练到测试

什么是测试?什么是训练?

我们通过举一个例子来阐明这个问题。

假设我们将要进行一场考试,那么我们开始进行复习。为了检验自己的复习质量,我们可能会做大量的练习。可能在第一次做的时候错了很多,但是由于有答案,所以我们可以通过答案来修正我们的问题,然后你接着做(同一套习题),然后你进行修正......随之我们不断地练习,修正,最后我们可能会把练习题做的很好。

这个过程其实就相当于机器学习中的训练。我们修正问题相当于机器学习在修正参数。当我们把习题做的很好地时候相当于机器学习得出了一个 Ein 足够小的函数。但是在这个过程中练习的效果已经不太明显了,因为我们几乎记住了练习的全部答案!因此我们需要付出代价 M(假设集大小) ,于是有了下面的公式一(第二课):


其中 Ein 表示我们对练习的掌握程度,越小越好,Eout 表示我们对教材的掌握程度(我们做练习的目标是为了了解我们对教材的理解程度)

很快我们迎来了考试。我们考试的目的是为了了解自己对教材的理解程度而不是为了拿高分,即是说我们是为了知道 Eout 而进行考试,由于我们无法直接计算 Eout,又根据 Hoeffdings 定理,我们可以通过 Ein(考试成绩)来逼近 Eout,所以我们进行考试。

这个过程就当于机器学习中的测试,是为了检验我们得出来的模型是否能够真实的反映事实!于是有了下面的公式二(注意:这个公式没有 M ,假设我们只考一次):


当该公式为真的时候我们就认为 Ein 能够代表 Eout。

所以训练就是通过不断地在现有资料中进行学习从而得出一个模型来表示这些数据。而测试就是为了检验该模型是否能够反映训练集之外的数据。(看看能不能由特殊推出一般)只有通过了该测试我们才认为该模型是好的。

对于感应机(线性模型)来说,一般假设集都是无穷大的,因此上面第一条公式基本上是没有什么指导意义的,因为任何一个假设都会满足第一个不等式。因此我们需要想办法用一个更合理的值代替 M,从而指导我们更好地学习,这也是本节课的重点内容。为了代替 M,我们需要知道 M 从哪里来。

假设 Bi 表示 hi 下面的坏事件:|Ein-Eout| > ε,P[Bmin] 表示所有的 P[Bi] 中最小的那个。

则 P[Bmin] <= P[B1 or B2 or B3...or Bm] <= P[B1] + P[B2] + P[B3] + ...P[Bm]。不等式右边共有 M 个项。然而只有当所有的 坏事件没有发生重叠的时候才会取得等号。


事实上,坏事件发生重叠是很的事情,如上图所示,只有当 B1,B2,B3 均没有重叠的时候不等式的等号才成立。那我们是否真的能够改进 M,用一个更合理的值代替它呢?

当然我们可以尝试通过数学的方法,计算出不等式右边的值,从而确定用什么值来代替 M,可是这样子计算实在是太复杂了,以至于根本就无法计算!

我们先看一张图片:


图中有两条线,分别代表两个假设,1、3 号区域表示错误的分类,2、4号区域表示正确的分类,黄色的区域表示两个假设分类错误的不一样的点即 △Eout,当△Eout 很小的时候有 △Ein 也很小,因为点落在黄色区域里面的概率也变小。所以两个假设对分类错误的点有很大部分的重叠(1、3 区域)

其实只要我们能够证明 |Ein(h1) - Eout(h1) |~|Ein(h2) - Eout(h2) | 就一定存在可以代替 M 的更友好的值。因为当|Ein(h1) - Eout(h1) |~|Ein(h2) - Eout(h2) | 成立时,那么有当 |Ein(h1) - Eout(h1) | > ε 时(坏事件 B1),大多数情况下(我们并不需要一个精确的值)都有 |Ein(h2) - Eout(h2) | > ε (坏事件 B2)成立,所以 B1 和 B2 在很多情况下是存在重叠的,即相关的。因此我们能够改进 M。正如上图所示,当线缓慢移动的时候所产生的分类有很多部分在分类错误的点中是重复的!

所以我们的目标是找出能够反映这些重叠区域的数据,并且找到一个合理的界限,从而避开复杂的数学计算。

那么,应该如何寻找这些数据?让我们先看一个例子。


2、举例说明

为了能够更好地描述问题,我们以二分类(+1, -1)为例,这样可以更好的是我们把精力放在真正重要的问题上。

观察以下图片:对于同一个数据集,不同的假设(分割线)把它分割成不同的两部分,但并不一定代表真实的分类!

其中粉红色区域表示 +1 类,蓝色区域表示 -1 类。

· 很明显,这样的假设(线)有无数多个,但是我们可以发现其中有很多对于训练集(图中的点来说)都是等效的,即它们对训练数据的分类情况是完全一样的,比如第一张图片中,如果把线向左平移一小段距离,则可以形成不同的假设,但是其在训练集中的分类效果不变。所以这两个假设对于训练集来说是相等的,所以我们只需保留一个假设就可以了。因此当我们要求一个假设集中共有多少个假设的时候,我们可以转化为求:对于一个假设集,这些数据最多能被二分成多少组不同的分类?假设最多能被分为 m 组,于是我们就可以用 m 来代替 M 了。由于 m 与 假设集(H)有关,所以我们的问题变成求函数: mH(Growth Function)。

在求 mH 之前,我们要确保 mH 不会是无穷大,否则我们就可以立刻放弃求解 mH 了,因为我们的目的就是要寻找出一个更小的值代替 M ,显然,无穷大怎么也不可能成为候选人。

那么在二分类问题中,mH 的最大值是多少呢?

假设我们有 N 个点(数据),则每个点都可能被归类为 +1 或 -1,因此每个点分类结果最多有两种,所以对于 N 个点,最多的分组结果是:2^N << 无穷大。很好,现在我们知道了 mH 最大不会超过 2^N,所以我们可以放心的求解 mH 了。形式化的公式如下:

我解释一下:X(大写)表示空间中的全部点,整个公式表示在所有可能的点中抽取出 N 个点出来,使得在假设集 H 下能得到最多的分组数。显然有 mH(N) <= 2^N;

可能你会说,等式的右边一定是等于 2^N ,还有必要计算吗?让我们找出一个例子来说明:

如果我们把该公式用在感知器模型中,看看结果会是怎么样的:

1、只有三个点,当三个点的分布类似如下结构时,则我们最多可以分出最多的组: 8 组,这已经是最多的了。这时有 mH(3) = 2^3 = 8

2、只有四个点,则我们最多可以分出多少组?观察下面的图片,无论我们怎样摆放这四个点,我们都没办法使得分组数达到 2^4 = 16 组,总会出现图中所示的情况和相反的情况,我们的感知器是没有办法对这些点进行这样的分组的(感知器是一条直线)。排除这两种情况,mH(4)  = 16-2 = 14

综上,我们有必要计算 max 值。


为了直观的计算 mH,现在我们观察一下三个特殊的例子:

1、H 是一条正射线,从 a 点出发,正方向上的点为 +1 类,反方向上的点为 -1 类(只需看X轴),如下图所示:

那么,对于给定的 N 最多可以分成多少不同的组呢?

N 个点把线分成了 N + 1 段,当 a 分别落在不同的段中,变形成了不同的分组,所以最多有 N+1 个分组。

mH = N + 1

2、H 是一条线段,在线段中间的点为 +1 类,线段外面的点为:-1 类(只需看X轴),如下图所示:


假设线段的两个端点分别为 a,b。我们从这 N+1 个空间中任取两个分别赋给 a,b,则可以形成所有的分组。这时:

mH = (N+1)* N / 2 + 1;(从 N + 1 个可能的值中取两个值,最后还需要加上一是因为考虑到 a = b 的情况)

3、H 是一个凸边形,凸边形里面包括边界上的点为 +1 类,外面的点为 -1 类。那么怎样的数据才能产生最多的分组呢?

当所有的 N 个点都在一个圆周上的时候可以产生做多的分组,事实上可以产生 2^N 个分组。如下:

任意连接圆上的点组成的一个封闭图形一定是凸边形,而且这样的凸边形有 2^N 个。

所以 mH = 2^N 。

假设我们能够计算出每一个模型的 m 出来,那么这个 m 用来做什么用呢?我们要用这个 m 代替 M (如果我们能够代替的话,证明将在下一节讲到)

如果我们的 m 是一个多项式函数,那么恭喜,我们可以用 m 代替 M 并且随着 N 的不断增大,不等式右边的值将会不断减少,最终如果我们的数据足够多,我们就可以让不等式的右边足够小,这时我们便可以用 Ein 来估算 Eout 了。为什么是多项式?

下面给出不严格的证明(为了有个感性的理解,严格的证明将要用到断点(break point )的概念,这是本课时最重要的概念)如下:我们可以把多项式 m(为了简单,只保留多项式的最高项,且假设 m = aN^b ) 代入 M 然后对不等式右边求导,如果当 N 大于某个值的时候导数为负,则说明在该点之后不等式右边会随之 N 的增大而减少(这里没有考虑到下界的问题,好像要求二次导,不太记得了。。。)

求导结果:ae^(-2ε^2N)*N^(b-1)*(b-2ε^2N)。显然,当 N 足够大的时候必然有 (b-2ε^2N) 小于 0 ,从而整个导数小于 0,从而递减。


3、关键概念---- 断点

定义:If no data set of size k can be shattered by H then k is a break point for H.

也就是说,如果对于一个大小为 k 的数据集,无论这些数据是什么都没办法由 H 产生所有的组合(2^k),但是当数据集的大小为 k-1 的时候却可以,则该 k 就是 H 的断点。

比如上面的模型中:

感知器:断点 4

正射线:断点 2,

线段    :断点 3,

凸边形:断点 ∞。

只要存在断点(不包括 ∞),我们就可以告诉你学习的行为,告诉你学习是否可行。断点是很重要的概念,请务必能清楚,下节课将讲述断点的性质及一些证明。


4、难题(Puzzle)

为了能更好地理解断点,请看下面的例子:

假设我们的数据集大小是 3 ,断点是 2,下图中没有填充的点表示被分到 -1 类,有填充的点表示被分到 +1 类。对于下面的任意一幅图,请问该模型能否同时产生图中对应的所有分类组合(每一行表示一个分类)?如果不行,请问为什么?

比如对于图一,表示该模型共产生了两组分类,其中第一组分类为:所有的点都被分为 -1 ,第二组分类为 X1,X2 被分为 -1 类,X3 被分为 +1 类。那么该模型能否产生这样的结果?即这些分组会不会互相矛盾以至于无论该模型是什么,只要满足断点是 2 ,都不可能同时产生这样的分组?

图一:                                                        

图二

图三:

图四


总结:

该课时首先用考试的例子说明了训练和测试的区别与联系,然后自然而然的引出了由于训练的不断重复而产生了代价 M 的问题,M 的存在使得机器学习无法进行,因为一般来说 M 都非常大,为了能够找到一个合理的 m 值来代替 M,作者首先说明了 M 值是可以被替代的,因为假设集中的假设结果中是存在互相重叠的部分。为了更好的理解分析问题,作者先从二分类开始,证明对于二分类有 m <= 2^N ,这样就第一次减少了 M ,使得机器学习可以进行了。在此基础上,作者通过举出不同的模型:正射线、线段、凸边形并且计算出了对于二分类,这些模型的具体 m 值,分别为:N+1、(N+1)N +1、2^N 。进一步,作者提出只要我们得出的 m 值是一个多项式函数,那么只要数据集足够大,我们就能够通过机器学习来求解该问题。为了证明这个结论,作者给出了断点的概念及一些替定模型的断点是多少,证明将在下一课时中给出。最后为了能够从感性的层面上感知断点的一些性质,作者给出了一个利用了断点性质的谜题。


加州理工学院公开课:机器学习与数据挖掘_训练与测试(第五课)