模型评估与误差
1 经验误差与过拟合
错误率:m个样本中a个分错,错误率为:E = a/m
精度:1 - 错误率
误差:预测输出与真实输出的差异
训练误差:训练集上的误差
泛化误差:测试集上的误差
- 过拟合
学习器将训练样本学的太好,将训练集样本的特殊性作为一般选择,这样会导致泛化能力下降,这一现象称为过拟合。与之相对的对训练样本一般性质都无法学好的称为欠拟合。
2 评估方法
通过实验测试来对学习器的泛化误差进行评估进而选择,为此我们需要一个测试集,用测试误差来近似泛化误差。
一般而言,我们假设测试样本的分布符合真是分布。且测试集和训练集尽量互斥。
常见的用来分割数据集为测试集和训练集的方法有:
留出法
直接将数据集分为互斥的两部分。
D = S ∪ T;S ∩ T = 空
需要注意的是,要将测试/训练集划分的尽量保持数据分布的一致性。
其缺点:
存在随机性,所以单次使用留出法的结果不够可靠和稳定,通常是取多次的均值。-
交叉验证(K折交叉验证)
将数据集D分为K个互斥的子集,每次选择其中的K-1个作为训练集,剩下的一个作为测试集。这样一来共有K次训练和测试,结果返回K次测试的均值。
其特例称为留一法,就是使K=数据量m。
自助法
对于有m个数据的数据集D,每次随机的从中取出一个样本并复制进D',然后放回D中。这样进行m次后,我们获得一个与数据集D一样大的D',其中由部分重复。
我们使用D'作为训练集D\D'作为测试集。
自助法适用于数据集较小的情况,此外因为从初始数据集中产生了多次不同的训练集,有利于集成学习。但是因为重复的样本,改变了原数据集的分布,所以引入了估计偏差,所以当数据量足够时不常使用。
测试集总量约为1/3.
3 性能度量
对模型的泛化能力进行评估,不仅需要可行的实验估计方法,还需要衡量其泛化能力的评价标准,这就是性能度量。
- 均方误差
对于给定的数据集D = {(x1,y1),(x2,y2),...,(xn,yn)},yn为xn的真实标记,要评估学习器f的性能就要将f(x) 与 y比较。
回归任务中最常见的性能度量就是“均方误差”
- 查全率、查准率与F1
错误率和精度虽然常用,单并不能满足所有需求。例如在信息检索中,我们更关心“检索出的信息中多少是用户所关注的”、“用户关注的信息有多少被检索出来了”。所以查准率 precision(准确率)和查全率 recall(召回率)更为适用于该需求。
对于二分类问题,可以将预测结果根据真实结果划分为真正率(true positive)、假正率(false positive)、真反率(true negative)、假反率(false negative)。显然TP+TN+FP+FN = 样本总数。
查全率与查准率相互矛盾
上图中,如果一个学习器的P-R曲线完全被另一个学习器的P-R曲线所包裹,那么后者优于前者。
平衡点BEP是P = R时的取值。通过BEP比较可以判断哪个学习器更加优秀。
更常见的是F1度量
当应用场景对P、R的重视程度不同时:
β > 1时查全率有更大的影响。
当然、当我们有多个混淆矩阵结果的时候,可以用取均值的方法获得宏P、宏R、宏F1等。
- ROC与AUC
很多学习器是为测试样本产生一个实数或概率预测,然后将这个预测值与阈值进行比较,大于阈值为正例,否则为反例。因此,我们可以根据预测对样本进行排序,将最可能的排在前列,分类过程就相当于选择一个截断点,前段为正例。当我们需要查准率较高时,截断点靠前;当需要查全率较高的时候,截断点靠后。ROC曲线就是基于这个角度来研究学习器的泛化性能的。
ROC曲线的纵轴为真正例率TPR(True Positive Rate),横轴为假正例率FPR。
ROC绘制规则为:
从(0,0)开始,对于给与的m1个正例和m2个反例,根据预测结果进行排序,依次将这些样例化为正例,若为真正例,则y值增加 1/m1,否则x值增加 1/m2,最后将这些点连线。所获得面积为AUC。
- 代价敏感错误率与代价曲线
现实任务中不同类型的错误会造成不同的后果,如医疗中的错诊。将健康的人错诊为病人远没有将病人错诊为健康人的代价严重。为了衡量不同类型错误的损失,可以为错误赋予非均等的代价。
代价敏感错误率为:
在非均等代价下,ROC曲线不能直接反应出学习器的期望总代价。
代价曲线绘制方法:
设ROC曲线上某一点坐标(TPR,FPR),计算出FNR = 1 - TPR,在平面绘制(0,FPR)到(1,FNR)的直线,线段下的面积表示了该条件下的期望的总体代价。ROC上的每个点都可以转为一条直线,然后取所有直线的下界,所围成的面积为在所有条件下学习器的期望总代价。
4 比较检验
上述的评估与度量方法并不能彻底得出学习器的性能结果,原因有以下三点:
- 结果是基于测试集的,而非真实泛化性能。
- 测试集上的性能与测试集本身的选择有关系。
- 学习算法有随机性。
所以,我们要使用统计假设检验作为重要的依据。
基于假设检验我们可以得出,若测试集上A的表现优于B,那么A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。
- 假设检验
对学习器泛化错误率分布有某种判断或猜测,例如错误率为某个定值。根据测试错误率推出泛化错误率的分布。
以错误率为性能度量,假设测试错误率为ϵ^, 泛化错误率为ϵ。由二项分布(独立采样基础上)知,泛化错误率为ϵ的学习器被测得测试错误率为ϵ^
的概率为:
- 二项式检验
对错误率小于定值定值a这样的假设进行检验。
假设检验需要做的就是假设 ϵ ≤ ϵ0在α的显著度下能否被拒绝。ϵ0是给定的一个概率值,意味着泛化错误率不能小于ϵ0,α也是一个值,常用取值是0.05。如果不能被拒绝,也就意味着有95%的置信度认为学习器的泛化错误率不大于ϵ0。
比如ϵ0=0.3,根据二项分布,如果是10个样本,那么有3个错误分类的概率最大。
具体计算时只需把错误样本数大于3的概率求和,看是否小于α即可。
5 偏差与方差
在估计了学习算法的泛化性能后,我们还希望了解它为什么能具有这样的性能。“偏差-方差分解”就是用来解释学习算法泛化性能的一种工具。
x:测试样本
y_D:x在数据集上的标记
y:x的真是标记
f(x,D):为训练集D上学得的模型f在x上的预测输出
f(x)均值:为期望预测
有E(f;D)=bias2(x)+var(x)+ϵ2
即泛化误差分解为偏差、方差、噪声之和。
回顾三者的定义,
- 偏差:
度量学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力 - 方差:
度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
*噪声:
表达了当前任务下任何学习算法所能达到的期望泛化误差的下限,即刻画了学习问题本身的难度
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性及学习任务本身的难度共同决定的。
一般来说,偏差与方差是有冲突的
在训练不足的时候,学习器拟合能力不够,训练数据的扰动不足以影响学习器,这个时候,偏差主导了泛化错误率。
当训练加深到一定程度的时候,学习器拟合能力加强,训练数据的扰动逐渐可以被学习器学到,方差主导了泛化错误率。
训练充足的时候,学习器的拟合能力非常强,训练数据的轻微扰动都会导致学习器的变化,若训练数据自身的非全局特性被学习器学到,就发生了过拟合。