机器学习(西瓜书笔记)第二章

二、模型评估与选择
2.1经验误差与过拟合
错误率:分类错误的样本占样本总数的比例
精度:精度=1-错误率
误差:学习器的实际预测输出与样本的真实输出之间的差异
训练误差/经验误差:学习器在训练集上的误差
泛化误差:学习器在新样本上的误差
过拟合:学习器把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,导致泛化性能下降
形成原因:由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了
欠拟合:学习器对训练样本的一般性质尚未学好
形成原因:由于学习能力低下造成的
模型选择:
理想的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型
2.2评估方法
测试集:测试学习器对新样本的判别能力
测试误差:已测试集上的测试误差作为泛化误差的近似
如果我们还有一个包含m个样例的数据集D={(x1,y1),(x2,y2),...,(xm,ym)},既要训练,又要测试,就需要通过对D进行适当的处理,从中产生出训练集S和测试集T。
留出法(hold-out):
直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T
训练/测试集的划分要尽可能保持数据分布的一致性。保留类别的方式通常称为(分层采样)
即便是在给定训练/测试集的样本比例后,仍存在多重划分方式对初始数据集D进行分割。
因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般多次取平均值。
常见做法:将大约2/3~4/5的样本用于训练,剩余样本用于测试
交叉验证法(cross validation):
k折交叉验证:均匀分成k份,依次取一份作为测试集,其他k-1份作为训练集,分别做k次训练和测试
交叉验证法评估结果的稳定性和保真性正在很大程度上取决于k的取值

留一法:
优点:评估结果往往被认为比较准确
缺点:训练M个模型的计算开销可能是难以忍受的
自助法(bootstrapping):
是一种从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。
样本在m次采样中始终不被采到的概率是(1-1/m)m,取极限为1/e约等于0.368

优点:
自助法在数据集较小、难以有效划分训练/测试集时也很有用
从初始数据集中产生多个不同的训练集
缺点:改变了初始数据集的分布,会引入估计误差
调参与最终模型:
在模型选择完成以后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型
测试数据:学得模型在实际使用中遇到的数据
验证集:模型评估与选择中用于评估测试的数据集
通常我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集合验证集基于验证集上的性能来进行模型选择和调参
2.3性能度量
除了如何划分集合、如何调参外,还有一点需要讨论——我们以什么样的指标来度量模型的表现?
定义:
衡量模型泛化能力的评价标准
均方误差:
回归任务常用的性能度量

错误率:

精度:

分类混淆矩阵:

查准率(precision):
预测中的正例实际为正例所占的比例

查全率(recall):
所有正例被预测为正例所占的比例

查准率P和查全率R是矛盾的

PR图:
P-R图可以直观地表示查准率P和查全率R的关系,曲线面积越大,算法越好。如果一个算法的P-R曲线能“包住”另外一个说明该算法比后者要好。

平衡点(BEP,Break-Even-Point):查准率P=查全率R时的取值
F1:
产出原因:BEP过于简化
F1是基于查准率与查全率的调和平均

Fβ是加权调和平均,能够让我们表达出对查准率/查全率的不同偏好

其中β>0度量了查全率对查准率的相对重要性
β=1时退化为标准的F1;
β>1时查全率有更大影响;
β<1时查准率有更大影响
很多时候,我们希望在n个二分类混淆矩阵上分别计算出查准率与查全率,记为(P1,R1),(p2,R2),…,(Pn,Rn)
方法一:一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率,记为(P1,R1),(p2,R2),…,(Pn,Rn),再计算平均值,这样就得到“宏查准率”( macro-p)、“宏查全率”( macro-r),以及相应的“宏F1”( macro-f1)
宏查准率(macro—P):

宏查全率(macro-R):

宏F1(macro—F1):

方法二:还可先将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,分别记为:
微查准率(micro—P):

微查全率(micro-R):

微F1(micro—F1):

Roc和AUC:
Roc:Roc全称是“受试者工作特征(Receiver Operating Characteristic)”曲线。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们的横、纵坐标作图,就得到了Roc曲线。
AUC:其中AUC(Area Under Roc Curve)为Roc曲线下所包含的面积,用于判断学习器间的性能谁更优。

Roc曲线的纵轴是“真正例率(True Positive Rate,简称TPR)”,横轴是“假正例率(False Positive Rate,简称FPR)”。
分类混淆矩阵


计算示例:
我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即Roc曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在Roc曲线的结果如下图:


为什么使用Roc和Auc评价分类器?
因为Roc曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,Roc曲线能够保持不变。
代价敏感错误率与代价曲线:
产生原因:在前面介绍的一些性能度量可以看出,它们大多隐式的假设了均等代价;然而在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同
非均等代价:为权衡不同类型错误所造成的不同损失,可将错误赋予“非均等代价”
二类代价矩阵:一般来说costii=0;若将第0类判定为第1类所造成的损失更大,则cost01>cost10;损失程度相差越大,cost01与cost10的值相差越大

敏感错误率:

D+与D-分别代表样例集D的正例子集和反类子集
代价曲线:

在非均等的代价下,Roc曲线不能直接反映出学习器的期望的总体代价,而代价曲线则可以。其中P是样例为正例的概率,纵轴是取值为[0,1]的归一化代价

Roc曲线上每一点对应了代价平面上的一条线段,设Roc曲线上点的坐标为(TPR,FPR),则可相应计算出FNR,然后在代价平面上绘制条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将Roc曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。
2.4比较检验
2.4.1产生原因:
直接取得性能度量的值然后“比大小”吗?实际上,机器学习中性能比较这件事要比大家想象的复杂得多。这里面涉及几个重要因素:首先,我们希望比较的是泛化性能,然而通过实验评估方法我们获得的是测试集上的性能,两者的对比结果可能未必相同;第二,测试集上的性能与测试集本身的选择有很大关系,且不论使用不同大小的测试集会得到不同的结果,即便用相同大小的测试集,若包含的测试样例不同,测试结果也会有不同;第三,很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会有不同。
2.4.2主要有3类方法可以对学习器的性能进行比较:
1.假设检验
二项检验与t检验
上面介绍的两种方法都是对关于单个学习器泛化性能的假设进行检验,而在现实任务中,更多时候我们需对不同学习器的性能进行比较,下面将介绍适用于此类情况的假设检验方法。
2.交叉验证t检验
这里的基本思想是若两个学习器的性能相同,则它们使用相同的训练/测试集得到的测试错误率应相同。
3.McNemar检验
交又验证t检验和 Mcnemar检验都是在一个数据集上比较两个算法的性能,而在很多时候,我们会在一组数据集上对多个算法进行比较.
4.Frieman检验与Nemenyi后续检验

2.5偏差与方差
产生原因:
对学习算法除了通过实验估计其泛化性能,人们往往还希望了解它“为什”具有这样的性能.“偏差方差分解”(bias- variance decomposition)是解释学习算法泛化性能的一种重要工具
期望预测:

使用样本数相同的不同训练集产生的方差:

噪声:

偏差:

期望输出与真实标记的差别称为偏差(bias)
泛化误差公式:

泛化误差可分解为偏差、方差和噪声之和
一般来说,偏差与方差有冲突,称为偏差-方差窘境(bias-variance dilemma)

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度.偏差一方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的.给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。

小贴士:
点击下方左右箭头,自动跳转到文集的上一篇和下一篇。
机器学习系列文档持续更新,求关注求三连!