機器學習基石 (Machine Learning Foundations) 学习要点小结:
课程来自coursera:
https://class.coursera.org/ntumlone-002/lecture
第13节 Hazard of Overfitting
overfitting:过拟合。
发生overfitting的原因:
(1)模型过于复杂(dvc太大);
(2)数据噪音大;
(3)有限的训练数据集;
比如,模型过于复杂会使Ein很小,但是实际上Eout很大,当然,在数据量足够多的情况下还是会降低Eout。
噪音有两种:
(1)随机噪音:真实的噪音数据,服从高斯分布。
(2)确定性噪音:由复杂的h(x)产生的噪音,过拟合。
再一次复习容易导致overfitting 的因素是:
(1)数据过少;
(2)随机噪音过多;
(3)确定性噪音过多(假设过于复杂(excessive power));
解决overfitting的方法:
(1)从简单模型做起;
(2)data cleaning(清除噪音) + data pruning(修剪噪音);
(3)data hinting(加入一些暗示或数据,比如在数字识别应用中,将原来的数据偏移或者旋转一定角度产生更多的训练数据);
(4)regularization(正则化,下面会介绍);
(5)validation(验证,下面会介绍);
第14节 Regularization
发生overfitting的可能之一是模型过于复杂,regularization就是解决这种overfitting的一种方法。比如,原本是2次曲线就可以描述f,现在做出了一个10次曲线的假设,很容易出现overfitting现象,因此我们希望模型变的简单些,让w分量只保持3个分量,其它分量为0或者尽可能的小。
H2为最初的hypothesis set,H2’为使模型简化后的、只保留最多3个w分量的hypothesis set,但是这样的假设是NP-hard的,我们继续放松条件,H(C)为更宽松的hypothesis set。这样,我们就将优化问题转化为:
我们在原来的梯度下降法的基础上增加一些对w的关于C的限制:
继续转化:
橙色加入的那一项就叫做regularizer,我们看一下实际的效果:
λ 越大,希望的w越短越好,对应的常数C越小,模型越倾向于选择更小的w 向量。这种正规化成为 weight-decay regularization,它对于线性模型以及进行了非线性转换的线性假设都是有效的。
下面跟VC Bound理论结合来说明正规化的好处:
根据VC Bound理论,Eout与Ein的差距在于模型的复杂度,模型越复杂,Eout与Ein的差距越大,通过正规化以后,我们得到了E_aug,使得原假设空间H变成了正规化后的假设空间H(C),与H 相比,H(C) 是受正规化的“约束”的,因此实际上H(C) 没有H 那么大,也就是说H(C) 的VC维比原H 的VC维要小,也就是Effective VC Dimension。因此,E_out 与 E_in 的差距变小。
L1 Regularizer与L2 Regularizer是适应不同条件的regularizer:
第15节 Validation
如何选择一个好的模型?
把所有数据D的一部分作为训练数据Dtrain,另一部分作为测试数据Dval。
训练数据Dtrain用来训练模型,测试数据Dval用来选择模型,看哪一个模型的表现更好就选择哪个。选择好那个最优的模型g后,通常要再用全部的数据集D在训练一次,得到g*,以此作为最后的模型输出。
经常用的一种做法是:V-fold Cross Validation
即:将训练资料分为V份,取其中V-1做训练,另外1份做validation,并不断进行该过程。根据经验,V通常取10。
Traning就像初赛,各个模型都从Hypothesis Set中选出最合适的h;Validation就像复赛,从多种模型的scheme中选出一个最优的。这两步都是在进行模型选择,之后的testing methods都只是在对模型进行estimate了。也因为Validation还是在做选择,只要做选择就会有数据的污染等等,所以Validation仍然比testing要乐观。对于模型来说,testing的表现才是真正要看重的,而不是最好的validation的表现。
第16节 Three Learning Principles
三个机器学习的锦囊妙计:
(1)Occam’s Razor 奥卡姆剃刀:simple is best.
先试线性的模型;选择模型之前永远要想一想是否尽可能地用了最简单的模型。
(2)Sampling Bias 抽样偏差
抽样有偏差的时候,学习算法产生的结果也会有偏差,这样的情形叫做Sampling bias。VC理论里的一个假设就是:训练数据与测试数据来自于同一个分布。
建议:尽可能的了解测试环境,让训练环境跟测试环境尽可能的接近。
比如:如果测试环境是last user records,也就是时间轴上靠后的使用者资料,那么训练的时候应该要想办法对时间轴上靠后的数据的权重加强一下。或者,做validation的时候也选择late user records靠后的用户资料。
(3)Data Snooping 偷看数据:不要偷看数据。
学习中使用数据的任何过程,都会间接的让你偷看到数据。偷看到数据的表现以后,再下决策去做任何的一件事都要想到,这个数据已经因为人脑的决策选择过程而多出了很多的model complexity而污染。
所以,在实际操作中,要谨慎地处理Data Snooping这件事情。要做到完全不偷看数据很难,一个折中的方式是做validation。另外,在实际操作中如果要做什么决定的时候尽量避免用数据来做决定,要先把domain knowledge变成feature放进去而不是看完数据再放专业知识进去。然后,要时刻存着怀疑之心,时刻要有一个感觉经过多少过程得到这些结果,结果到底可能被污染的多严重。
总结:
通过这16节课,学到了:
3个相关的领域:
3个理论的限制:
3个线性的模型:
3个关键的工具:
3个学习的原则:
3个未来需要学习的方向: