错误率(error rate)
我们把分类错误的样本占样本总数的比例称为“错误率”;与之对应的是精度(accuracy),即“精度 = 1 - 错误率”。(隐式地假设了均等代价)
更一般的,我们把学习器的实际预测输出与样本的真实输出之间的差异称为误差(error)。
欠拟合(underfitting)与过拟合(overfitting)
欠拟合意味着学习器对训练样本的一般性质尚未学好,过拟合会导致泛化性能的下降。
欠拟合比较容易克服,过拟合是机器学习面临的关键障碍。但过拟合是无法彻底避免的,我们所能做的只是缓解。
一般来说,偏差过大意味着欠拟合,方差过大对应着过拟合。
模型选择问题(model selection)
理想的解决方案是对候选模型的“泛化误差”进行评估,然后选择泛化误差最小的那个模型。但我们无法直接获得泛化误差,训练误差又因为过拟合现象不适合作为标准。所以我们采用以下的评估方法。
评估方法:将数据分为训练集与测试集,通过测试集(testing set)来测试学习器对新样本的判别能力,然后以测试集上的测试误差近似作为泛化误差,我们通常假设测试样本也是从样本真实分布中独立同分布采样而得。注意测试集应尽量与训练集互斥。
产生训练集与测试集的常见方法:
留出法:直接将数据集划分为两个互斥的集合(大约2/3~4/5的样本用于训练,剩余样本用于测试),注意需要保持数据分布的一致性,从采样的方面看应采用分层采样。使用留出法时一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
交叉验证法:将数据分为大小差不多的k个互斥的集合(分层采样),k-1个用于训练,剩余的用于测试,重复k次。与留出法类似,k折交叉验证法通常要随机使用不同的划分p次,取均值作为评估结果。
自助法:有放回的从含有m个样本的数据集D中采样,每次采样一个,这个过程重复m次,得到新的数据集D',那么D中不在新数据集中出现的数据大概占0.368。于是我们用D'作为训练集,用D\D'作为测试集。
更一般的,我们按照6:2:2的比例将数据集分为训练集(traing set),验证集((cross) validation set),测试集(test set)
通过训练集训练得到多个模型,通过验证集计算并选择在验证集上的仍误差较小的模型,最后通过测试集计算选中模型的泛化误差
性能度量(performance measure)
对于回归任务,常用的性能度量是“均方误差”,或代价函数。
对于分类任务,常用的性能度量为以下几种:
首先,我们定义:
1. TN / True Negative: case was negative and predicted negative
2. TP / True Positive: case was positive and predicted positive
3. FN / False Negative: case was positive but predicted negative
4. FP / False Positive: case was negative but predicted positive
P = TP / (TP + FP)
R = TP / (TP + FN)
一般来说,查准率高时查全率偏低,查全率高时查准率偏低。
直观来看,大致如下图所示:
以查准率为纵轴,查全率为横轴作图得到P-R图。一般来说,如果曲线A完全“包住”了曲线B,那么可以认为前者性能更好。
P-R图上查准率=查全率的点为平衡点BEP(break-even point)
与BEP对应的是F1度量:F1 = ( 2 * P * R ) / ( P + R )
F1度量的一般形式为 F1β = [ ( 1 + β^2 ) * P * R ] / [ ( β^2 * P ) + R ]
β > 1时查全率有更大影响;β < 1时查准率有更大影响。
ROC曲线纵轴为真正例率TPR,横轴为假正例率FPR,用来评估一般情况下学习器泛化性能的好坏。
AUC(area under ROC curve)
堆土ROC曲线,常用曲线下面积,即AUC来度量学习器的性能。
代价敏感错误率与代价曲线
前面的性能度量其实都隐式地假设了,学习器做出错误分类时的代价是一样的,
然而往往在现实生活中,不同的错误的代价是不同的。
为权衡不同错误所造成的不同损失,可为错误赋予“非均等代价(unequal cost)”,
我们所希望的不再是简单的最小化错误次数,而是希望最小化“总体代价”。
在非均等代价下,ROC曲线不能直接反映学习器的期望总体代价,而“代价曲线”则可以达到目的。
比较检验
学习器性能的比较是很复杂的一件事,简单地讲,学习器的性能评估结果可能会随测试集的不同而有很大差异。
因而我们需要考虑的是,若在测试集T上观察到学习器A比学习器B好,
那么学习器A的泛化性能是否在统计意义上要优于学习器B。
而假设检验,为我们的考虑提供了解决办法。
这牵涉到一定的数学知识,总的思路大致是:
由样本的测试错误率推出学习器的泛化错误率的分布,并在统计意义上得出结论:是否拒绝相应的假设
假设检验
对一个测试集中的数据进行分类,单次分类的错误的概率为β0,总的测试错误率为β1,那么泛化错误率β0的学习器被测得测试错误率为β1的概率分布满足二项分布。
提出原假设H0,备择假设H1,由α求得临界值,若测试错误率小于临界值,在α的显著度下,假设H0不能被拒绝,即能以1-α的置信度认为H0成立,否则假设H0可以被拒绝,即在显著度为α的情况下可以认为H1成立。
大多时候,我们需要进行多次训练/测试,得到多个测试错误率,这时我们采用另一种相似的方法----t检验
t检验
多次留出法或交叉验证法得到多个测试错误率,由样本集的均值和方差,推出学习器的均值(泛化错误率)。
将k个测试错误率看做泛化错误率的独立采样,构造服从自由度为k - 1的t分布的变量
考虑双边假设,在一定的显著度下,得出统计意义上的结论:是否拒绝相应的假设
以上两种方法适用于对单个学习器的泛化性能进行检验,对于多个学习器性能的比较,我们采用以下的方法:
交叉验证t检验
基于一个数据样本集对不同的学习器性能进行比较。
这里的基本思想是若两个学习器的性能相同,则它们使用相同的训练/测试集得到的测试错误率应相同。
对每对结果求差△,若两个学习器性能相同,则差值均值应为零。因此可根据差值△1、△2、△3......△k 来对“学习器A和学习器B性能相同”这个假设做t检验,计算出差值的均值与方差。同样的对△构造新的随机变量,在显著度α下,计算出临界值进行判断是否拒绝原假设。
McNemar 检验
对于二分类问题,由测试数据得到e00,e01,e10,e11
构造服从自由度为1的卡方分布的变量,并在一定的显著度下,得出在统计意义上的结论:是否拒绝相应的假设。
即两学习器的性能是否有显著差异。
Friedman 检验 与 Nemenyi 后续检验
对基于多个数据样本集的多个学习器性能进行比较。
1.使用留出法或交叉验证法得到每个算法在不同数据集上的测试结果。
2.然后在每个数据集上根据测试性能有好到坏排序,并赋序值1,2,... ;若算法测试性能相同,则平分序值。
3.得到每个模型的平均序值。
4.构造符合卡方分布/F分布的随机变量。
5.在显著度α下,得到临界值,判断是否拒绝原假设H0:“所有算法的性能相同”。
6.若拒绝原假设,这时需进行后续检验,计算出平均序值差别的临界值域CD,若两算法的平均序值之差超过了临界值域CD, 则以 相应的置信度拒绝“两个算法性能相同”这一假设。
偏差与方差
噪声:标记值与真实值的差的平方的期望。
偏差:预测输出的期望与与真实标记的差别。
对算法的期望泛化误差进行分解得:
E(f;D) = bias^2(x) + var(x) + ε^2
也就是说,泛化误差可分解为偏差、方差与噪声之和。
偏差刻画了学习算法本身的拟合能力
方差刻画了数据扰动所造成的影响
噪声刻画了问题本身的学习难度
由此可见,学习器的泛化性能是由学习算法的能力、数据的充分性、以及学习任务本身的难度所共同决定的。
并且可以看到,当偏差和方差都较小的时候,我们可以得到泛化性能较好的学习器,但往往偏差和方差是有冲突的,
即随着模型训练程度的增加,模型对数据的拟合程度越来越高,偏差就会越小,方差会越大,模型受数据变动的影响越大,
即会出现过拟合的现象。
所以,我们一般将数据集分为三部分:
一般的,我们按照6:2:2的比例将数据集分为训练集(traing set),验证集((cross) validation set),测试集(test set)
通过训练集训练得到多个模型,通过验证集计算并选择在验证集上的仍误差较小的模型,
最后通过测试集计算选中模型的泛化误差,这样得到的学习器具有较好的性能。
附思维导图: