目录
1 经验误差与过拟合
把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在m个样本中有a个样本分类错误,则错误率E=a/m;相应的,1-a/m称为“精度”(accuracy),即“精度=1-错误率”。
把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。
当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为“过拟合”(overfitting)。与“过拟合”相对的是“欠拟合”(underfitting),这是指对训练样本的一般性质尚未学好。
过拟合是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。
在现实任务中,往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型。
这就是机器学习中的“模型选择”(model selection)问题。理想的解决方案当然是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。
2 评估方法
通过实验测试来对学习器的泛化误差进行评估并进而做出选择,这就需要一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。
2.1 留出法
“留出法”(hold-out)直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D=S∪T,S∩T=Ø。
在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。
如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。
若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确;
若令测试集T多包含一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。
这个问题没有完美的解决方案,常见做法是将约2/3~4/5的样本用于训练,剩余样本用于测试。
2.2 交叉验证法
“交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪…D∪k,Di∩Dj=Ø(i!=j)。
每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。
然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可以获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。
交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”(k-fold cross validation)。
k最常用的取值是10,此时称为10折交叉验证。
将数据集D划分为k个子集同样存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随即使用不同的划分,重复p次,最终的评估结果是这p次交叉验证结果的均值。
假设数据集D中包含m个样本,若令k=m,则得到了交叉验证法的一个特例:留一法(Leave-Ones-Out,简称LOO)。
留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集——每个子集包含一个样本;
留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似。
因此,留一法的评估结果往往被认为比较准确。
然而,留一法也有其缺陷:在数据集比较大时,训练m个模型的计算开销可能是难以忍受的,而这还是在未考虑算法调参的情况下。
另外,留一法的估计结果也未必永远比其它评估方法准确。
2.3 自助法
“自助法”(bootstrapping),直接以自助采样法(bootstrap sampling)为基础。
给定包含m个样本的数据集D,对它进行采样产生数据集D’,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;
这个过程重复执行m次后,就得到了包含m个样本的数据集D’,这就是自助采样的结果。
显然,D中有一部分样本会在D’中多次出现,而另一部分样本不出现。
可以做一个简单的估计,样本在m次采样中始终不被采到的概率是(1-1/m)m,取极限得到:
即通过自助采样,初始数据集D中越有36.8%的样本未出现在采样数据集D’中。
于是可将D’用作训练集,D/D’用作测试集;
这样,实际评估的模型与期望评估的模型都使用m个训练样本,而仍有数据总量约1/3的、没在训练集中出现的样本用于测试。
这样的测试结果,亦称“包外估计”(out-of-bag estimate)。
自助法在数据集较小、难以有效划分训练/测试集时很有用;
此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。
然而,自助法产生的数据集改变了初始数据集的分布,这回引入估计偏差。
因此,在初始数据量足够时,留出法和交叉验证法更常用一些。
2.4 调参与最终模型
调参和算法选择没什么本质区别:对每种参数配置都训练出模型,然后把对应最好模型的参数作为结果。
机器学习常设计两类参数:
一类是算法的参数,亦称“超参数”,数目常在10个以内;
另一种是模型的参数,数目可能很多。
两者调参方式相似,均是产生多个模型之后基于某种评估方法来进行选择;
不同之处在于前者通常是由人工设定多个参数候选值后产生模型,后者则是通过学习来产生多个候选模型。
学习算法的很多参数是在实数范围内取值,因此,对每种参数配置都训练出模型来是不可行的。
现实中常用的做法是:对每个参数选定一个范围和变化步长,虽然选定的参数值往往不是“最佳”值,但是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行。
给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上只使用了一部分数据训练模型。
因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型。
这个模型在训练过程中使用了所有m个样本,这才是最终提交的模型。
3 性能度量
对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。
性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
在预测任务中, 给定数据集D={(x1,y1),(x2,y2),……,(xm,ym)},其中yi是示例xi的真实标记。
要评估学习器f的性能,就要把学习器预测结果f(x)与真实标记y进行比较。
回归任务最常用的性能度量是“均方误差”(mean squared error)
更一般的,对于数据分布D和概率密度函数p(·),均方误差可描述为
3.1 错误率与精度
错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。
对样例集D,
分类错误率定义为
精度则定义为:
更一般的,对于数据分布D和概率密度函数p(·),错误率和精度可分别描述为:
3.2 查准率、查全率与F1
将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,令TP、FP、TN、FN分别表示其对应的样例数,则显然有TP+FP+TN+FN=样例总数。
分类结果的“混淆矩阵”(confusion matrix):
查准率P:
查全率R:
查准率和查全率是一对矛盾的度量。
一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
根据学习器的预测结果对样例进行排序,排在前面的学习器认为“最可能”是正例的样本,排在后面的则是学习器认为“最不可能”是正例的样本。
按此排序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。
以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”。
P-R图直观地显示出学习器在样本总体上的查全率、查准率。
在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。
如果两个学习器的P-R曲线发生了交叉,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。
一个比较合理的判据是比较P-R曲线下的面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。
“平衡点”(Break-Even Point,简称BEP),是“查准率=查全率”时的取值。但是BEP太过于简化,更常用的是F1度量:
在一些应用中,对查准率和查全率的重视程度有所不同。
F1度量的一般形式——Fβ,能让我们表达出对查准率/查全率的不同偏好,它定义为
其中β>0度量了查全率对查准率的相对重要性。
β=1时退化为标准的F1;
β>1时查全率有更大影响;
β<1时查准率有更大影响。
F1是基于查准率与查全率的调和平均(harmonic mean)定义的
与算术平均( )和几何平均(sqrt(P*R))相比,调和平均更重视较小值。
如果希望在n个二分类混淆矩阵上综合考察查准率和查全率,
一种直接的做法是现在各混淆矩阵上分别计算出查准率和查全率,
记为(P1,R1),(P2,R2),…,(Pn,Rn),再计算平均值,
这样就得到“宏查准率”(macro-P):
“宏查全率”(macro-R):
以及相应的“宏F1”(macro-F1):
还可先将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,分别记为再基于这些平均值计算出“微查准率”(micro-P)
“微查全率”(micro-R):
和“微F1”(micro-F1):
3.3 ROC与AUC
很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较。
这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。
实际上,根据这个实值或概率预测结果,可将测试样本进行排序,“最可能”是正例的排在前面,“最不可能”是正例的排在后面。
这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)将样本分为两部分,前一部分判作正例,后一部分则判作反例。
ROC曲线,全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。
根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”。
ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False Positive Rate,简称FPR),两者分别定义为:
显示ROC曲线的图称为“ROC图”。
绘图过程:
- 给定m+个正例和m-个反例,根据学习器预测结果对样例进行排序,
- 然后把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标(0,0)处标记一个点;
- 然后,将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例;
- 设前一个标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为(x,y+1 m + \frac{1}
当前若为假正例,则对应标记点的坐标为
- 用线段连接相邻点即得ROC曲线。
若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;
若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。
此时如果一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。
假定ROC曲线是由坐标为{(x1,y1),(x2,y2),…,(xm,ym)}的点按序连接而形成(x1=0,xm=1)。
则AUC可估算为:
形式化地看,AUC考虑的是样本预测的质量排序,因此它与排序误差有紧密联系。
给定m+个正例和m-个反例,令D+和D-分别表示正、反例集合,则排序“损失”(loss)定义为:
即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个罚分。
lrank对应的是ROC曲线之上的面积:若一个正例在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序在其之前的反例所占的比例,即假正例率,因此有:
3.4代价敏感错误率与代价曲线
为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。
根据任务的领域知识设定一个“代价矩阵”(cost matrix),其中costij表示将第i类样本预测为第j类样本的代价。
一般来说,costij=0;若将第0类判别为第1类所造成的损失更大,则cost01>cost10;
损失程度相差越大,cost01与cost10值的差别越大。
非均等代价下,希望的不再是简单地最小化错误次数,而是希望最小化“总代价”(total cost)。
ROC曲线不能直接反映出学习器的期望总代价,因此需要“代价曲线”(cost curve)。
代价曲线图的横轴是取值为[0,1]的正例概率代价:
其中,p是样例为正例的概率;
纵轴是取值为[0,1]的归一化代价:
代价曲线的绘制:
- ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上的点的坐标为(FPR,TPR),则可相应计算出FNR,
- 然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总代价;
- 如此将ROC曲线上的每个点转化为代价平面上的一条线段,
- 然后取所有线段的下届,围成的面积即为在所有条件下学习器的期望总代价。
4 比较检验
在某种度量下取得评估结果后,不可以直接比较以评判优劣
因为:
- 测试性能不等于泛化性能
- 测试性能随着测试集的变化而变化·
- 很多机器学习算法本身有一定的随机性
统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据
4.1 假设检验
两学习器比较:
- 交叉验证t检验(基于成对t检验)
k 折交叉验证;5x2交叉验证
- McNemar检验(基于列联表,卡方检验)