模型的评估与选择
-
三个误差:
我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义:
在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。
在测试集上的误差称为测试误差(test error)。
学习器在所有新样本上的误差称为泛化误差(generalization error)。
显然,希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。 -
过拟合和欠拟合
过拟合:学习能力过强,以至于把训练集中不太一般的特征也学习到了。
欠拟合:学习能力不足,训练样本的一般性质尚未学好。
在过拟合问题中,训练误差十分小,但测试误差较大;在欠拟合问题中,训练误差和测试误差都比较大。
欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍。(正则化?) -
泛化误差指的是模型在所有新样本上的适用能力,我们无法直接获得泛化误差。通常我们采用一个“测试集”来测试学习器对新样本的判别能力,然后以“测试集”上的“测试误差”作为“泛化误差”的近似。
-
训练集与测试集的划分方法
4.1. 留出法
将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T,满足D=S∪T且S∩T=∅。
常见的划分为:大约2/3-4/5的样本用作训练,剩下的用作测试。
训练/测试集的划分要尽可能保持数据分布的一致性,以避免由于分布的差异引入额外的偏差,常见的做法是采取分层抽样。同时,由于划分的随机性,单次的留出法结果往往不够稳定,一般要采用若干次随机划分,重复实验取平均值的做法。
4.2. 交叉验证法
将数据集D划分为k个大小相同的互斥子集,采用分层抽样的方法获得这些子集。
每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就有K种训练集/测试集划分的情况,从而可进行k次训练和测试,最终返回k次测试结果的均值。
交叉验证法也称“k折交叉验证”,k最常用的取值是10,下图给出了10折交叉验证的示意图。
将数据集D划分为K个子集的过程具有随机性,因此K折交叉验证通常也要重复p次,称为p次k折交叉验证,常见的是10次10折交叉验证,即进行了100次训练/测试。每个子集中只有一个样本时称为留一法。
4.3. 自助法
给定包含m个样本的数据集D,每次随机从D 中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D 中,使得该样本在下次采样时仍有可能被采到。重复执行m 次,就可以得到了包含m个样本的数据集D’。
可以得知在m次采样中,样本始终不被采到的概率取极限为:
将D’作为训练集,将D-D’作为测试集。
自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用。 -
性能度量
5.1 回归问题常用:MSE(均方误差):; 如果知道数据分布D和概率密度p,则:;
5.2 分类问题常用:错误率和精度
5.3 查准率和查全率
5.3.1. “P-R曲线”
是描述查准/查全率变化的曲线,P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测(实际上就是逐步降低样本为正例的概率的阈值),每次计算出当前的P值和R值,如下图所示:
若一个学习器A的P-R曲线被另一个学习器B的P-R曲线完全包住,则称:B的性能优于A。
若A和B的曲线发生了交叉,“平衡点”(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。
5.3.2. F-Measure,又称F-Score
调和平均
算术平均
几何平均
综合考虑查全率和查准率
即:
时为常见的F1度量(调和平均):
5.3.3. 宏查全率macro-R、宏查准率macro-P、微查全率micro-R、微查准率micro-P
宏macro:先计算每个小矩阵的P、R后取平均值
微micro:汇总各个矩阵得到TP\TN\TP\FN,直接计算大矩阵的P、R
5.4 ROC与AUC
5.4.1 真正例率(实际为正例的样本里被正确预测的比例):
假正例率(实际为反例的样本里被错误预测的比例):
5.4.2 ROC
以TPR为纵轴,以FPR为横轴
(0,0)表示将所有的样本预测为负例,(1,1)则表示将所有的样本预测为正例,(0,1)表示正例全部出现在负例之前的理想情况,(1,0)则表示负例全部出现在正例之前的最差情况。
为真正例,y+;为假正例,x+
若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。
5.4.3 ROC曲线下的面积定义为AUC(Area Uder ROC Curve)
这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。
5.5 代价敏感错误率与代价曲线
将正例预测为反例()和将反例预测为正例$cost_{10}的代价不均等
代价敏感错误率:
在非均等代价下,ROC曲线不适用,应用代价曲线反映学习器的期望总体代价。
横轴是取值为[0,1]之间的正例概率代价,p为样例为正例的概率:
纵轴是取值为[0,1]之间的归一化代价:
即假反例率。 -
比较检验
泛化性能和测试集上的性能未必相同
泛化错误率意味着算法在一个样本上犯错的概率是
测试错误率表示在m个测试样本中有被错误分类
在m个测试样本上,泛化错误率为的学习器的测试错误率恰为的概率为:
符合二项分布,在时最大。
单个学习器泛化性能的假设检验
考虑假设:,在的概率内能观察到的最大错误率为:
此时,若测试错误率,就能以的置信度认为假设不能被拒绝,即学习器的泛化错误率不大于。
假设经多次留出法或交叉验证法得到的k个测试错误率:,则平均测试错误率和方差:
,
考虑到这个测试错误率可看作泛化错误率的独立采样,则变量:服从自由度为的分布.
假设:和显著度,若平均错误率与测试错误率的差位于$[t_{-\alpha/2},t_{\alpha/2}]内,接受该假设。
不同学习器之间的性能比较检验
当对两个学习器进行k折交叉验证时,在相同的第折测试集上,学习器A和B会产生一对测试错误率和,若两个学习器学习性能相同,则在相同的一组测试集上的测试错误率相同,即,取差值,共k个差值,可看作学习器A和学习器B的性能差值的独立采样,因此有:
~
为的标准差。
如果,则假设不能被拒绝,即认为两个学习器性能没有显著差异。否则,平均测试错误率小的那个学习器性能更优。
在这成对的t检验中,前提是测试错误率是泛化错误率的独立采样,但在样本有限时,不同轮次的训练难免出现不同程度的重叠,使得前提不成立,会造成假设成立的概率被过高估计。
采用5次2折交叉验证可缓解这一问题。在每次2折交叉验证之前将数据集全部打乱,使得五次数据划分不重复。对第一次2折上两个学习器产生的两对测试错误率取差,,为了缓解测试错误率的非独立性,只对这次取平均值,但计算出每次2折的差值的方差。
变量服从自由度为5的t分布。
针对二分类问题,
如果两个学习器性能相同,有,变量服从正态分布,且均值为1,方差为
F检验则可以在多组数据集进行多个学习器性能的比较,基本思想是在同一组数据集上,根据测试结果(例:测试错误率)对学习器的性能进行排序,赋予序值1,2,3…,相同则平分序值,如下图所示:若学习器的性能相同,则它们的平均序值应该相同,且第i个算法的平均序值ri服从正态分布N((k+1)/2,(k+1)(k-1)/12),
若“H0:所有算法的性能相同”这个假设被拒绝,则需要进行后续检验,来得到具体的算法之间的差异。常用的就是Nemenyi后续检验。Nemenyi检验计算出平均序值差别的临界值域,下表是常用的值,若两个算法的平均序值差超出了临界值域CD,则相应的置信度1-α拒绝“两个算法性能相同”的假设。
-
方差和偏差
偏差指的是预测的期望值与真实值的偏差,方差则是每一次预测值与预测值的期望之间的差均方。方差和偏差具有矛盾性,这就是常说的偏差-方差窘境(bias-variance dilamma),随着训练程度的提升,期望预测值与真实值之间的差异越来越小,即偏差越来越小,但是另一方面,随着训练程度加大,学习算法对数据集的波动越来越敏感,方差值越来越大。换句话说:在欠拟合时,偏差主导泛化误差,而训练到一定程度后,偏差越来越小,方差主导了泛化误差。因此训练也不要贪杯,适度辄止。