2.1 经验误差与过拟合
错误率(error rate):分类错误的样本数占总样本数的比例
精度(accuracy)= 1 - 错误率
误差(error):学习器的实际预测输出与样本的真实输出之间的差异
训练误差(training error)/经验误差(empirical error):学习器在训练集上的误差
泛化误差(generalization error):学习器在新样本上的误差
过拟合(overfitting):学习器将训练样本学习得太好,而导致泛化性能下降的现象
欠拟合(underfitting):对训练样本的一般性质尚未学好
选择模型时(model selection),理想的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小的。然而,泛化误差无法直接获得,这就引出模型评估与选择问题。
2.2 模型评估与选择
为评估泛化误差而通常采用的方法为实验测试,即使用一个测试集来测试学习器对新样本的判断能力,然后将测试集上的测试误差(testing error)作为泛化误差的近似。一般情况下,假设测试集样本是从样本真实分布iid采样得到。值得注意的是,采用此方法时,测试集应尽可能与训练集互斥。
通过对数据集D={(x1,y1),(x2,y2),...,(xm,ym)}进行处理,可以得到训练集S与测试集T。处理方法包含以下几类:
a. 留出法(hold-out)
直接将D划分为互斥的集合S与T,值得注意的是,划分时要保证S与T的数据分布一致性。另一个问题是,即便给出了S与T的比例,仍然存在对D的多种分割方式,采不同的分割方式的评估策略间会有差异。一般将2/3~4/5的样本用于训练,剩下的用于测试,采用若干随机划分、重复进行实验后取平均值作为留出法的评估结果。
b. 交叉验证法(cross validation)
先将D划分为k个大小相似的互斥子集,即
每个子集Di都尽可能保持数据分布一致性,即从D中分层采样得到。然后,每次用k-1个子集作为训练集,余下的那个子集作为测试集。最终返回k组测试的均值。
交叉验证法的结果的稳定性和保真性很大程度上取决于k的取值,因此又称为“k折交叉验证”(k-fold cross validation)。通常取k=10。
设D包含m个样本,令k=m,则得到交叉验证法的一个特例:留一法(Leave-One-Out, LOO)。留一法不受随机样本划分方式的影响。另外,在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,因此其评估结果往往认为比较准确。缺陷是:数据集较大时,训练m个模型的开销太大,以及NFL定理对留一法同样适用。
c. 自助法(bootstrapping)
自助法以自助采样(bootstrap sampling)为基础[Efron and Tibshirani, 1993],即给定包含m个样本的数据集D,对其随机采样产生数据集D‘:每次随机挑选一个样本,将其拷贝放入D',再将样本放回D中,使得该样本在下次采样时仍可能被采集到;此过程重复n次后,得到了包含m个样本的D'。做一个简单的估计,样本在m次采样中始终不被采集到的概率是(1-1/m)m,取极限得到1/e≈0.368。因此,通过自助采样,D中36.8%的样本未出现在D‘中。于是可以将D'用作训练集,将D\D'用作测试集。这样的测试结果亦称为“包外估计”。
自助法适用于数据集较小、难以有效划分训练/测试集的情况。以及,它可以从初始数据集中产生多个不同的训练集,这对集成学习算法比较有用。缺陷是,由于改变了初始数据集分布,自助法会引入估计偏差。因此,在数据量足够时,留出法与交叉验证法更常用。
d. 调参与最终模型
大多数学习算法有参数设定。因此在评估、选择模型时,除了选择算法,还需要调整参数(parameter tuning)。常用的做法是为每个参数选定范围和步长。强大的学习算法需要大量的参数设定,以致在许多任务中,参数设定对模型的性能有关键性影响。
在选定学习算法和参数后,应当用数据集D重新训练模型。
事实上,我们通常把模型在实际应用中遇到的数据称为“测试数据”,为加以区分,将评估测试时的数据集称为“验证集”(validation set)。
2.3 性能度量
性能度量(performance measure)的含义是衡量模型泛化能力的评价标准。在预测任务中,评估学习器ƒ的性能,就是要把学习器预测结果ƒ(x)与真实标记y比较。
回归任务最常用性能度量为“均方误差”(mean squared error):
更一般的,对于数据分布D和概率密度函数p(•),均方误差可以描述为
2.3.1 错误率与精度
对于样例集D,分类错误率定义为
精度则定义为
更一般的,对于数据分布D和概率密度函数p(•),错误率与精度可以分别描述为
2.3.2 查准率,查全率与F1
错误率与精度不能满足所有任务要求。这样的需求在信息检索、Web搜索等应用中十分常见。例如,当我们想要知道“检索出的信息中有多少比例是用户感兴趣的”,或者“用户感兴趣的信息中有多少被检索出来”时,错误率是不够用的。为此,引入“查准率”(precision)与“查全率”(recall)性能度量。
对于二分问题,可以将样例根据其真实类别与学习器预测类别的组合,划分为四种情形:
- 真正例(true positive)
- 假正例(false positive)
- 真反例(true negative)
- 假反例(false positive)
得到分类结果的“混淆矩阵”(confusion matrix):
用TP,FP,TN,FN分别表示其对应的样例数,则有TP+FP+TN+FN=样例总数。于是,查准率P与查全率R分别定义如下:
值得注意的是,查全率与查准率是一对矛盾的度量;其中一者高时,另一者往往比较低。
很多情形下,可以根据学习器的预测结果对样例进行排序,学习器认为“最可能”是正例的样本排在前。按此顺序把样本作为正例预测,可以计算出当前的查全率、查准率。以查准率为纵轴,查全率为横轴,得到显示“P-R曲线”的“P-R图”(如下图,图取自书中):
进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可以断言后者的性能优于前者。对于曲线交叉的情况,则可以比较将面积的大小。
但面积通常不太容易计算,于是引入“平衡点”(Break-Event Point, BEP)作为性能度量,即P=R时的取值。取值越高,认为学习器的性能越好。
但BEP还是过于简化了些,更常用的是F1度量:
F1是基于查准率与查全率的调和平均定义的(harmonic mean)。与几何平均与算术平均相比,调和平均更注重较小值。
当查准率与查全率并不是同等重要时,可以采用F1度量的一般形式——Fβ:
Fβ是加权调和平均(对1/R加权β2)。其中β>0度量了查全率对查准率的相对重要性;β>1时查全率有更大影响,β<1时查准率有更大影响,β=1是退化为F1。
如何在n个二分混交矩阵上综合考虑查准率与查全率?
一种方法是先算出查准率与查全率,再取平均,得到:
宏查准率(macro-P)
宏查全率(macro-R)
宏F1(macro-F1)
另一种方法是先对TP、TN、FP、FN取平均,再计算查准率、查全率、F1,得到:
微查准率(micro-P)
微查全率(micro-R)
微F1(micro-F1)
2.3.3 ROC与AUC
ROC全称为“受试者工作特征”(Receiver Operating Characteristic)曲线,源于二战中雷达信号分析技术,后引入机器学习[Spackman,1989]。
根据学习器为样本产生的概率预测,对样本进行排序:“最可能”是正例的排在前,“最不可能”是正例的排在后。分类过程相当于在对样例的排序中插入“截断点”(cut point),前一部分判为正例,后一部分判为反例。在不同应用任务中,可根据任务需求的不同采用不同的截断点。因此,这个排序本身的好坏,体现了综合考虑学习器在不同任务下“期望泛化性能”的好坏。ROC曲线从这个角度出发研究学习器泛化性能。
如上一段所述,我们将样例排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的值:“真正例率”(True Positive Rate, TPR)和“假正例率”(False Positive Rate, FPR),分别作为横轴和纵轴作图,就得到ROC曲线。其中
ROC曲线的作图方法详见书p.34。
与P-R图相似,若一个学习器的ROC曲线被另一个学习器的曲线包住,则可以断言后者性能优于前者。曲线发生交叉时,可以比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。
AUC考虑样本预测的排序质量。给定m+个正例和m-个反例,则有
其中lrank为排序的“损失”(loss),定义如下:
2.3.4 代价敏感错误与代价曲线
现实任务中,不同的错误会造成不同的结果。为权衡不同类型的错误造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。
例如,在二分任务中,可以得到下述”代价矩阵“(cost matrix):
在非均等代价下,我们希望做的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。例如,若将上表中第0类作为正类,第一类作为反类,令D+和D-分别代表正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可以达成目的。代价曲线的横轴是取值为[0,1]的正例概率代价
其中p是正例的概率;纵轴是取值为[0,1]的归一化代价
其中FNR=1-FPR是假反例率。代价曲线的绘制方法见书p.36。