机器学习(周志华)知识点总结——第2章 模型评估与选择
第2章 模型评估与选择
2.1 经验误差与过拟合
“错误率”:分类错误的样本数占样本总数的比例称为"错误率" (error rate)。即如果在m个样本中有a个样本分类错误,则错误率 E=a/m。
“精度”:1-a/m 称为“精度”,即“精度=1-错误率”。
学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差” (training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差” (generalization error)。
我们希望得到泛化误差小的学习器。实际能做的是努力使经验误差最小化,实际希望的是在新样本上能表现得很好的学习器。为达到这一目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别。
“过拟合”:当学习器把训练样本学得“太好了”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降这种现象在机器学习中称为“过拟合”(overfitting)。与之相对的是**“欠拟合”**(underfitting),这是指对训练样本的一般性质尚未学好。
“过拟合”:由于学习能力过于强大,不可避免,只能缓解。
“欠拟合”:由于学习能力低下,比较容易克服,加大学习,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等。
现实中,往往有多种学习算法可供选择,甚至同一算法不同参数配置时,也会产生不同模型。如何选择,即“模型选择”。
理想解决方案是对候选模型泛化误差进行评估,然后选择泛化误差最小的模型。
2.2 评估方法
通过“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为“泛化误差”的近似。
测试样本:1. 从样本真实分布中独立同分布采样
2. 测试集与训练集尽可能互斥(未在训练集中出现,未使用过)
原因举例:老师出10道题目供学生练习,考试时不能把这10道题作为试题,因为是想体现学生“举一反三”的能力。
但是我们只有一个包含m个样例的数据集,数据集如下图所示:
怎么做到既要训练,又要测试?
答案是:对数据集D进行适当处理,产生训练集S和测试集T。
2.2.1 留出法
“留出法”直接将数据集D划分为两个互斥集合,一个训练集S,一个测试集T。即:
举例:D=1000个,训练集S=700个,测试T=300个。用S进行训练后,在T上进行测试中有90个出错,错误率为90/300 * 100%=30% ,精度为1-30%=70%。
注意:训练/测试集划分要尽可能的与数据分布一致,避免因数据划分引入额外偏差对结果产生影响。
从采样(sampling)的角度看待数据集的划分,保留类别比例的采样方式称为“分层采样”。
如:若D=1000个=500正+500反
则S=700个=350正+350反,T=300个=150正+150反
另一个需要注意的是:即便给定训练测试/训练集的样本比例,仍存在多种划分方式对初始数据集D进行划分。
如:在上面例子中,可以先将D中样本排序,然后把前350个正例放在S中,也可以把最后350个正例放在S中……,这些不同的划分将导致不同的S/T,相应的模型评估也会影响。
因此,单次使用留出法得到的估计结果不够稳定可靠,使用留出法时,一般采用若干次随机划分、重复实验评估后取平均值。
如:进行100次随机划分,每次产生一个S/T用于实验评估,100次后就得到100个结果,留出法返回的就是这100个结果的平均。
留出法会导致一个窘境:若S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但是由于T较小,导致评估结果不够稳定准确;若T多包含一些样本,则S与D差别变大,用S训练出的模型与用D训练出的模型可能有较大的差别,降低评估结果的保真性(fidelity)。
该问题没有完美解决方案,常见做法:2/3~4/5的 样本用于训练,剩余用于测试。
2.2.2 交叉验证法
“交叉验证法”将D划分为k个大小相似的互斥子集,每个子集 都尽可能与数据分布保持一致,即“分层采样”。即:
过程:每次用k-1个子集的并集作为训练集,余下子集为测试集,最终返回k个测试结果的均值。
显然,交叉验证法评估结果的稳定性和保真性很大程度上取决于k的取值,所以又称“k折交叉验证”(k-fold cross validation),k通常取10,称为10折交叉验证,示意图如下:
与留出法类似,将数据集D划分为k个子集同样存在多种划分方式,为减少因样本划分不同而引入的差别,通常要随机使用不同划分重复p次,最终结果是p次k折交叉验证结果的均值。如常见的“10次10折交叉验证”。
特例:留一法
解释:数据集D中包含m个样本,令k=m,则每次只留一个样本测试,所以留一法不受随机随机样本划分的影响。
评价:通常认为留一法的评估结果比较准确(不全是,“没有免费的午餐”定理同样适用)。缺陷是数据量较大时,计算量太大。
2.2.3 自助法
留出法和交叉验证法中,由于保留一部分样本用于测试,因此实际评估的模型的所使用的训练集比D小,必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度太高。因此,需要寻找办法可以减少训练样本规模不同造成的影响,同时高效的进行实验估计。
“自助法”(bootstrapping)是一个比较好的解决方案,以自助采样法为基础,给定包含m个样本的数据集D。
采样数据集D’ :每次从D中随机选一个样本放入D’中,然后放回,使得该样本喜爱次采样也可能被采到;重复m次,得到包含m个样本的数据集D’(D中有一部分在D’中重复出现,有一部分从未出现)
样本在m次采样中始终不被采到的概率为:
取极限得:
数据集D中大约有36.8%的样本未出现在训练集D’中, D\ D’用作测试集。实际评估的模型与期望评估的模型都使用了都使用了m个训练样本,而我们仍有数据总量约1/3的,没在数据集中出现的样本用于测试。这样的结果又称“包外估计”(out-of-bag estimate)
使用场合:数据集小、难以有效划分训练/测试集(S/T);此外,能产生多个不同的S,对集成学习有益
然而,自助法产生的数据集改变了原始分布,会引入估计偏差;
因此,在数据量充足时,留出法、交叉验证法更常用。
未完待续…6.12
参考资料:
《机器学习》 作者: 周志华
机器学习手推笔记 https://github.com/Sophia-11/Machine-Learning-Notes
写给自己
天行健,君子以自强不息。