2、Sampling Bias.
3、Data Snooping.
1、Occam‘s Razor.
爱因斯坦曾经说过一句话:
An explanation of the data should be made as simple as possible, but no simpler.
软件工程中也有类似的名言:
Keep it simple, stupid(KISS)
在机器学习领域同样存在类似的名言:
The simplest model that fits the data is also the most plausible. -Occam‘s Razor
既然保持事情简单是如此重要,那么
1)对于一个模型来说,怎样才算简单?
2)为什么简单的一般就是好的?
首先回答第一个问题:怎样才算简单?
在机器学习中,存在两种类型的复杂度:模型的复杂度和假设集的复杂度。
模型复杂度的评价标准有两条:MDL 及 模型的阶。MDL 是最小描述长度(minimum description length)的缩写。对于一个模型,如果描述它所需要的信息越少则越简单。比如现在有一个模型,其中第一个数是 2,第 i 个数是第 i-1 个数的2倍(等比数列),那么该模型的描述可以为:a[i] = 2^i;相比于模型:a[i] = ax^2 + bx + c 要简单。模型的阶是指最高项的阶,越小越简单,平方阶就比立方阶简单。
假设集的复杂度评价标准有:Entropy 及 VC dimension。Entropy 描述了一个假设集中个个模型的离散程度。VC dimension 则描述了该假设集的学习能力,VC 维越高越复杂。
有些模型看起来很复杂,但实际上并不复杂,比如 SVM。该模型仅仅由不多的支持向量组成,所以其 MDL 不大。
举例:
曾有这样一个故事:足球预测。
B 每周都收到一封邮件预测下一周的足球比赛结果,每次预测都准确。如果你是 B 你会花钱购买下一周的预测结果吗?
分析:对于 B 来说,假设集大小为 1.但其实:
A 给众多的人发信息预测足球结果,其中一半的预测是:主场胜利。另一半预测是:主场失败。显然肯定有一半预测准确。接着再向预测正确的那一半利用同样的技巧发送预测信息。如此多次,肯定会有部分幸运儿,每次发给他们的预测都是正确的。不巧,B 就是幸运儿之一。
对于那部分幸运儿来说,他们只看到发给他们的预测,所以他们只考虑运用在他们身上的模型的复杂度,因此他们认为准确率非常高:100%。但是事实上假设集是 2^n 次方,预测结果根本就没有意义。
这说明我们不但要考虑模型的复杂度,还要考虑与之相关的假设集的复杂度。假设越复杂,得出来的模型就越不可靠。
第二个问题:为什么简单的一般就是好的?
对于假设集来说,复杂的假设集比简单的假设集有更大的可能拟合训练数据(VC维),但是如果简单的模型能够拟合训练数据,那么其可信度就会提高。因为复杂模型可能做的太多了。
2、Sampling Bias.
If the data is sampled in a biased way, learning will produce a similarly biased outcome.
抽样偏差,这个问题主要是在进行数据抽样的时候忽略了数据的分布情况。导致抽样数据与实际数据的分布不一致。这样学习出来的模型的泛化能力就会很差。(因为没有考虑某一部分数据的分布情况)。可以利用分层抽样的方法避免。
除了上述情况外, 还有一种情况出现在真实测试的时候。假设现在训练好一个模型:信用贷款。如果现在有人要来贷款,可以通过该模型得出一个结果:拒绝或接受。如果结果为:接受。但是最后发现这个家伙并没有能力还贷。因此我们可以利用该数据修正我们的模型。然而,如果当初的结果是拒绝,那我们将没有办法知道“拒绝”是否是一个正确的选择,也就是说我们没有办法在实际得到关于结果为"拒绝"的数据的正确性。
上述情况也是抽样偏差的一种。那该如何解决?土豪专用方法:当模型的结果为:拒绝的时候,你接受那个人的贷款,同时记录下模型的预测。最后在判断你的模型是否正确。
3、Data Snooping.
如果数据影响了机器学习过程的每一步,则它的泛化能力就会被削弱。(?_?)
(if a data set has affected any step in the learning process,its ability to assess the outcome has been compromised.)
数据窥视的主要在以下方面:
1、直接查看数据,然后选择“合适”的模型进行训练。
2、多次使用同一数据集:不同模型利用同一个数据集进行学习。
为什么数据窥探会弱化模型的泛化能力?
针对第一种情况,在我们选择合适的模型的时候,我们也在进行"学习":根据训练数据的分布情况,选择模型。因此我们实际上是扩大了假设集的复杂度。根据 VC 维理论,我们需要更多的数据才能得到同样的泛化能力。
针对第二种情况,也存在同样的原因。我们也在无意中扩大了假设集的大小。
解决方法有两种:
1、避免数据窥探。-_-
2、避免不了就在计算泛化理论的时候把数据窥探考虑进来。比如说把认为增加的假设集复杂度考虑上,增大数据集等。