@dongxi
2017-08-27T19:27:52.000000Z
字数 12229
阅读 2466
0完成
机器学习
机器学习基石
CS229
Learning-From-Data
机器学习是一种非常非常有力的工具,它能够通过一定的数据预测剩下的数据,实现一个学习的过程,但是机器学习为什么可以预测?本文借助VC维度这一概念,来粗浅的解释一下这个问题(本文章中,提及到的机器学习任务都默认是二分类问题,推广到其他问题与二分类问题相似)。
机器学习过程中,我们希望可以使用样本的统计量来估计总体的参数,所以我们必须要有一个假设,就是样本和总体服从同一分布,在我目前的认知中,这也是机器学习的最基本的条件,如果这一条件都无法满足,那么,我认为机器学习是无法进行的。所以,以下的所有问题,我们都假设样本和总体是服从同一分布的。
对于服从同一分布的情况,样本和总体会满足一定的条件,其中Hoeffding's Inequality就描述了这种性质:
在之前的推导中,我们使用了一个很大的上限,我们认为遇到等于每一个方程遇到的概率之和。这是一个很大的上界,如果方程,那么他们遇到的事件也应该是十分相似的,如下图,如果可以将接近的方程相互合并,那么或许可以将限制到一个可以接受的范围。
现在假设要从平面上挑选一条直线作为将一个数据进行分类,很显然中是有无数个方程的(参数范围为实数域),但是由于产生结果只有两类,所以可以将方程分为两类:
如果我们的数据点变为两个和,那么可以产生四种结果,也就意味着有四种直线:
同理,如果有三个数据点,便可以出现8种分类结果,也就是会可以产生8类直线进行分割(不考虑三点共线的情况,在这里我们只讨论最多产生的直线分类):
那么,对于四个数据点的情况,我们可以出现16种分类组合,但是好像可以产生的分类类型出现了一点变化:
很明显有一种情况我们是无法用线性进行分割的,对于这种情况,我们最多产生14种直线进行分割。这里我并没有找到很严格的证明,但是我们可以启发性的认为属于同一类的直线,他们将会同时遇到/不遇到,所以新的上限可以进行一定程度的紧缩:
在以下的过程中,我们使用一个代表中一种类型的直线,而代表能够产生直线类型的集合,所以我们会有
Positive Rays
这是一个很简单的模型,如果大于值,那么我们就预测点为,反之则预测为,很明显,这时我们的增长函数为:。
与上述类似,使用简单的排列组合,可以推导出此时我们的成长函数为:。
3. Convex Sets
对于一个凸集合,从中任选个点,这些点包裹的空间范围,预测为,那么增长函数并不是多项式级别的,而是指数级别的,即:。
以上只是列举了少数几个特别简单的,那么对于一个不是那么简单的,比如多维空间的线性分割,我们该如何推导增长函数呢?
首先,我们引入两个比较简单的概念,Shatter和Break Point。如果当作用于有个样本的时,产生的数量与相等,那么我们就说这个输入被给shatter掉了。
对于一个给定的成长函数,从开始,对于第一个,使当时,永远有,那么我们称是成长函数的break point,也就是意味着对于任何的,都无法shatter(其实,只要break point为k,那么任何都不可能被shatter)。
以二维平面的线性分类问题为例,当时,总可以shatter,对于时,存在可以shatter的情况,但是当时,任何情况都不可以shatter,换言之,4便是该的break point。
我们简单推导一下这一过程,首先假设我们有个的break point为2,那么对于时,增加一个dichotomy,那么会有:
很显然,这是可能成立的,我们继续增加dichotomy,那么:
我们再增加一个我们继续增加dichotomy:
此时,出现了不可以被shatter的内容,因为我们已经列举了和的所有情况,这与的事实不符,继续尝试可以发现,我们已经无法增加任何组合了。因此,时,能够产生的dichotomies最多便是4种。
为了方便起见,我们采用表示的任意的能够产生的最大的dichotomies的数量(这里的是任意的,是一个很宽的上限,比如该例可能)。
虽然说,一般的情况下我们都是难以得到一个准确的,但是我们是可以推导出的上界的。我们可以很轻易的得到下表:
但是,如何能够填写表格中还处于空白的部分呢?我们穷举中所有的dichotomies穷举出来,然后进行简单的排序:
其中,部分中的都是成对出现的,而则都是单独存在的。下面我们去掉,然后将重复的部分进行合并:
很显然,对于部分一定是不能被shatter的,所以会有:。接下来,单独看部分,则有:
的情况下,是成对存在的,如果在可以被shatter掉任何两个点,那么就可以和产生的dichotomies就可以被shatter了,与我们的不符,因此不能被shatter任何两个点shatter,即:。
到目前为止,我们终于可以推导出了的上界,也就是:
在前文中,我们可以知道如果中存在一个break point,那么就可以保证其增长速度一定是多项式级别的,同时根据上面的推导,很显然break point越大,那么相应的复杂度也就会越高,在这里引入VC维度(VC Dimension)这一概念来表述的复杂度(实际上,直接用break point也应该是可以的描述的)。
一个的VC维度(记为)描述了其能在任何情况shatter的最多的点集中点数目,很显然,,因此增长函数的上界可以变更为:
到目前为止,我们似乎已经将要证明的东西证明出来了,在确定这件事之前,我们在确定一下,现在我们有的不等式可以写成这样:
对于较小的,我们可以比较容易的求出到什么情况完全无法在shatter了,但是对于比较复杂的模型就比较困难了,这时可以根据模型的自由度(模型中可以自由变动的参数个数,即我们的机器需要通过学习来决定的参数个数)近似的得到一个。比如我们之前的例子:
回顾我们之前提及的两个问题:
这就导致了如果我们选择的不能过大,同样也不能过小,要合适才好,不过,合适才是最难的。令,那么我们希望的发生概率就变为了,其中又被称为置信度。经过简单的推导,我们可以得到为:
本篇文章最开始是由于CS 229中关于VC维度那章节去查阅资料时,发现机器学习基石好像最初的几节课都是在讲这个东西的,就去看了机器学习基石,可是没想到前七节课都是讲的这个,然后就索性全都看了,还买了书。
在写本篇文章时,很大程度上借鉴了机器学习笔记中的内容,其中的内容写的确实很详尽,建议阅读。
Machine Learning Foundations (機器學習基石)
机器学习笔记
Learning From Data