林轩田机器学习基石笔记4:机器学习的可行性

笔者处于学习阶段,有任何问题欢迎指正。

0. 前言

这一篇文章中我们将会对机器学习的可行性进行一次讨论,首先我们得明确一个分类器怎么才算是好的分类器呢?很简单,能准确分类的就是好分类器。但是事情并没有那么简单,如果您感到好奇就继续往下看吧。这里放一下我要讲解的大纲。
这里写图片描述

1. 引出问题:机器学习真的可行吗?

我们前面说了,好的分类器能够精准的分类,但是什么才是精准的分类呢?我们看一个例子就会明白了!
假如有以下学习问题:
这里写图片描述
上面6个是用来训练分类器的样本,得到训练函数 g(x) ,最下面的为测试样本,那么 g(x) 的结果是什么呢?也许 g(x)=1 ,因为 yn=1 的三个样本中,左上角的方块均为黑色,而测试样本也是这样;但是 g(x)=1 也是OK的,因为下面三个样本均是对称的,而测试样本也是这样子!所以说不管预测出来的是什么,我都可以说你错了,也都可以说你对了。
我们再看一个相似的例子:
这里写图片描述
输入特征 X={0,1}3
输出特征 Y = {O,X}
其中g是我们的分类器,f1~f8是理想的分类器。这里大家可能会疑惑,为什么有这么多的理想分类器呢?理想分类器不应该只有一个吗?我想是的,理想分类器确实只有一个。这里有8个理想分类器是为了说明当这8个理想分类器对样本数据预测结果相同,对测试数据确并不相同,但是这几个都是正确的分类器。因此,我们预测的分类器g就迷惑了,到底与哪个理想分类器相似才是好的分类器呢?同样的,不管怎么说都可以,因为对于样本的预测都是对的呀。

既然这样子,机器学习还有什么用呢?

2. 概率方法:霍夫丁不等式

请大家不要着急,这一问题会慢慢揭晓的。为了更好的理解这一问题,我们得讲一下霍夫丁不等式。

假如有一个罐子,里面有绿色的小球和橙色的小球,我们如何能知道里面每种颜色的小球比例呢?当然,直接数是一个不错的方法,但是当小球的数量太多时这一方法会变得非常吃力。统计学中可以进行抽样,然后使用样本的统计量(statistic)来推断总体的参数(parameter),譬如使用样本均值估计总体期望。
这里写图片描述
对待数小球的这一问题,我们可以从罐子中抓一把球,然后数一下这些球中每种颜色的小球比例,以此来估计罐子中每种颜色的小球比例。

  • bin(罐子):黄球的比例 P(orange)=μ ,绿球的比例 P(green)=1μ ,我们并不知道 μ 的值为多少。
  • sample(样本):一共有 N 个样本,黄球的比例为 v ,绿球的比例为 v ,我们知道 v 的值是多少。

那么,我们如何能保证 v μ 有联系呢?其实我们并不能保证这二者相等,我们可能刚好抓到一把绿的,但是罐子中还有很多黄色的。但是这种事情的概率在我们抽取的数量变大的时候会越变越小。因此,只要我们保证样本数量 N 足够大,就能使得两者相似。在概率论上,我们通常使用霍夫丁不等式来表示这一现象:

P[|vμ|>ϵ]2exp(2ϵ2N)

其中 ϵ 表示我们的容忍度,当 μ v 的差别小于容忍度时,我们称 μ v “差不多”(PAC, probably approximately correct),当 μ v 差别大于容忍度时,我们称 μ v ”差很多”。“差很多”这件事发生的概率越小越好,最大不会超过公式右边。

3. 单假设函数下的错误率

上一部分讲了这么多概率论的东西,又和机器学习有什么关系呢?这一部分我会将两者联系起来,回答大家机器学习是否可行。
一张对比图告诉大家:
这里写图片描述
看不懂不要紧,我慢慢讲解每一条。
1. 罐子中未知的黄色小球概率 μ =========》假设函数 h(x) 是否为理想的分类器 f(x)
2. 从罐子中取出的的样本 =============》从所有资料中取出的样本
3. 黄色小球 ==================》假设函数 h(x) 与理想分类器的预测结果不同
4. 绿色小球==================》 假设函数 h(x) 与理想分类器的预测结果相同
5. 检查抽出来N个黄色小球的概率 ================》检验假设函数 h 在抽出样本中的正确率

因此,使用上一部分的逻辑,我们可以通过预测选择样本的正确性来评估分类器的好坏。即分类器的实际错误率(未知)为:

Eout(h)=ϵXP[|h(x)f(x)|]

分类器在抽出的样本中的错误率(可知)为:
Ein(h)=1Nn=1N[|h(x)f(x)|]

同样的,利用霍夫丁不等式我们可以得到
P[|Ein(h)Eout(h)|>ϵ]2exp(2ϵ2N)

简单说来,当右边这个“上界”足够小时,我们可以说h在sample中的表现(错误率)与h在总体中的表现是差不多的。
这一过程可以总结成一幅图:
这里写图片描述
新增加了黄色几条线,分别表示从训练集中取出数据,及从假设函数集中取出假设函数 h , 并用这些数据判断 h f 在所有数据中是否相似。但是这一些分析只对于单一假设函数 h 进行分析,当存在多个假设函数时,我们实际上是从很多假设中挑一个表现最好( Ein 最小)的作为最终的假设。因此这里就需要添加一个验证流程(Verification Flow),这个流程使用历史数据来判断某个 h 够不够好。
这里写图片描述

4. 多假设函数下的错误率验证

到此为止万无一失了吗?No,因为概率论喜欢与人开玩笑。举个例子,150个人,每人抛一个硬币5次,至少有一个人5次皆为人头向上的概率为99.15%。所以一个小概率事件如果重复多次,它发生的概率也会非常的大。
同理,学习算法中会发生如下情况:
学习算法 A 在备选函数集 H 中(含有很多 h )挑选 h ,突然找到一个 hi ,发现它在 D 上没犯错误或只犯了很少错误, A 就以为这个 hi 就是我们需要的 g 。但实际上这个 hi X 上却犯了很多错误( Ein(hi) Eout(hi) 差很远)。对于这个 hi 来说, D 就是一个坏样本(Bad Sample)。
这里写图片描述
H 中可能提取若干样本 D={D1,D2,D3,...} ,而对于一个假设函数 h 的坏样本数量起始很少(图中就两处),因此根据霍夫丁不等式知道单假设函数碰到坏样本的概率很小:
这里写图片描述
但是当h增多呢?
这里写图片描述
根据之前的分析,对于单一假设函数来说,某一样本是BAD的概率很小。而当 h 数量增多时,当一个样本存在一些 h 满足 Ein Eout 不相等时就称之为BAD Data。因此某一样本为BAD的上界为:
这里写图片描述 所以,当假设空间有限时(大小为M)时, 只要N 足够大,发生BAD sample 的概率就非常小。此时学习是有效的。但是当M趋向于无穷大时怎么办呢?我们之后会讨论。