周志华《机器学习》总结——二、模型的评估与选择

目录

二、模型的评估与选择

2.1 误差与过拟合

2.2 训练集与测试集的划分方法

2.2.1 留出法

2.2.2 交叉验证法

2.2.3 自助法

2.3 性能度量

2.3.1 均方误差/错误率/精度

2.3.2 查准率/查全率/F1

2.3.3 ROC与AUC

2.3.4 代价敏感错误率与代价曲线

2.4 比较检验

2.4.1 假设检验

2.4.2 交叉验证t检验

2.4.3 McNemar检验

2.4.4 Friedman检验与Neme后续检验

2.5 偏差与方差

二、模型的评估与选择

2.1 误差与过拟合

学习器对样本的实际预测结果与样本的真实值之间的差:误差(error)。定义:

  • 训练误差(training error)或经验误差(empirical error):在训练集上的误差

  • 测试误差(test error):在测试集上的误差

  • 泛化误差(generalization error):学习器在所有新样本上的误差,希望泛化误差尽量小

在过拟合问题中,训练误差十分小,但测试误差教大;在欠拟合问题中,训练误差和测试误差都比较大。欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍。定义:

  • 过拟合(overfitting):学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了

  • 欠拟合(underfitting):学习能力太差,训练样本的一般性质尚未学好

2.2 训练集与测试集的划分方法

在现实任务中,往往有多种算法可供选择,应该选择哪一个算法才是最适合的呢?如上所述,希望得到的是泛化误差小的学习器,理想的解决方案是对模型的泛化误差进行评估,然后选择泛化误差最小的那个学习器。但是,泛化误差指的是模型在所有新样本上的适用能力,无法直接获得泛化误差。

通常采用一个“测试集”来测试学习器对新样本的判别能力,然后以“测试集”上的“测试误差”作为“泛化误差”的近似。显然:选取的测试集应尽可能与训练集互斥

2.2.1 留出法

将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T,满足D=S∪T且S∩T=∅,常见的划分为:大约2/3-4/5的样本用作训练,剩下的用作测试。需要注意的是:训练/测试集的划分要尽可能保持数据分布的一致性,以避免由于分布的差异引入额外的偏差,常见的做法是采取分层抽样。同时,由于划分的随机性,单次的留出法结果往往不够稳定,一般要采用若干次随机划分,重复实验取平均值的做法。

2.2.2 交叉验证法

将数据集D划分为k个大小相同的互斥子集,满足D=D1∪D2∪...∪Dk,Di∩Dj=∅(i≠j),同样地尽可能保持数据分布的一致性,即采用分层抽样的方法获得这些子集。交叉验证法的思想是:每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就有K种训练集/测试集划分的情况,从而可进行k次训练和测试,最终返回k次测试结果的均值。交叉验证法也称“k折交叉验证”,k最常用的取值是10。

与留出法类似,将数据集D划分为K个子集的过程具有随机性,因此K折交叉验证通常也要重复p次,称为p次k折交叉验证,常见的是10次10折交叉验证,即进行了100次训练/测试。特殊地当划分的k个子集的每个子集中只有一个样本时,称为“留一法”,显然,留一法的评估结果比较准确,但对计算机的消耗也是巨大的。

2.2.3 自助法

希望评估的是用整个D训练出的模型。但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。“自助法”正是解决了这样的问题。

自助法的基本思想是:给定包含m个样本的数据集D,每次随机从D 中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D 中,使得该样本在下次采样时仍有可能被采到。重复执行m 次,就可以得到了包含m个样本的数据集D'。可以得知在m次采样中,样本始终不被采到的概率取极限为:

Image Name

这样,通过自助采样,初始样本集D中大约有36.8%的样本没有出现在D'中,于是可以将D'作为训练集,D-D'作为测试集。自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用

2.3 性能度量

性能度量(performance measure)是衡量模型泛化能力的评价标准,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果

2.3.1 均方误差/错误率/精度

在回归任务中,即预测连续值的问题,最常用的性能度量是“均方误差”(mean squared error)

Image Name

在分类任务中,即预测离散值的问题,最常用的是错误率和精度,错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例,易知:错误率+精度=1。

Image Name

2.3.2 查准率/查全率/F1

检索出的信息中有多少比例是用户感兴趣的(查准率),用户感兴趣的信息中有多少被检索出来了(查全率)。对于二分类问题,分类结果混淆矩阵与查准/查全率定义如下:

Image Name

查准率和查全率是一对矛盾的度量。例如我们想让推送的内容尽可能用户全都感兴趣,那只能推送我们把握高的内容,这样就漏掉了一些用户感兴趣的内容,查全率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个,这样查准率就很低了。

“P-R曲线”正是描述查准/查全率变化的曲线,P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示:

Image Name

评估P-R曲线:若一个学习器A的P-R曲线被另一个学习器B的P-R曲线完全包住,则称:B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了“平衡点”(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。

F1度量的一般形式—Fβ,F-Measure,又称F-Score,是P和R的加权调和平均。β>1查全率有更大影响,β<1查准率有更大影响

F1度量:β=1,是P和R的调和平均,当F1较高时,模型的性能越好。

Image Name

Image Name

有多个二分类混淆矩阵,例如:多次训练或者在多个数据集上训练。估算全局性能的方法有两种,分为宏观和微观。宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R值macro-R,再算出Fβ或F1,而微观则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出Fβ或F1。

Image Name

2.3.3 ROC与AUC

学习器对测试样本的评估结果一般为一个实值或概率,设定一个阈值,大于阈值为正例,小于阈值为负例,这个实值的好坏直接决定了学习器的泛化性能,若将这些实值排序,则排序的好坏决定了学习器的性能高低。ROC曲线正是从这个角度出发来研究学习器的泛化性能,ROC曲线与P-R曲线十分类似,都是按照排序的顺序逐一按照正例预测,不同的是ROC曲线以“真正例率”(True Positive Rate,简称TPR)为横轴,纵轴为“假正例率”(False Positive Rate,简称FPR),ROC偏重研究基于测试样本评估值的排序好坏:可以衡量分类器的准确性和鲁棒性

TPR 也叫召回率(Recall)/灵敏度:表示分类器正确识别出正例的比率,即正例中被正确预测为正例的比率。表达式与查全率一致。

FPR:表示分类器错误地将负例预测为正例的比率,即负例中被错误预测为正例的比率。

真正率和假正率,两者关注的(目标)都是正样本,这符合实际问题的诉求,只不过两者关注的角度不同,真正率是从正样本的角度来看预测之后正样本,假正率是从负样本的角度来看预测之后的正样本。两者分开来看并最终综合起来,就能比较全面和合理评估预测模型。

若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。ROC曲线下的面积定义为AUC(Area Uder ROC Curve),不同于P-R的是,这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。

准确率:通常我们都会直接使用准确率作为模型的评价指标,但是在实际使用以及一些特定环境中,准确率作为模型的评价指标存在一定的局限性,比如当样本分布不均时,一种极端特殊的情况,当正样本比例为1%,负样本笔记为99%,那么只需要将所有的样本都判为负样本,准确率就高达99%,这显然是不合理的。

精准率,又称查准率,关注正样本与预测效果,指在预测为正例中有多少为真正的正例,模型预估的精准程度

召回率,又称查全率,关注正样本与样本的原本属性,指的是数据集中的正样本有多少被识别出来

真正率(真阳率),即召回率

假正率(假阳率),原本为负样本中有多少被预测为正样本,关注的还是正样本,只不过从负样本的维度来观察

2.3.4 代价敏感错误率与代价曲线

上面的方法中,将学习器的犯错同等对待,但在现实生活中,将正例预测成假例与将假例预测成正例的代价常常是不一样的,例如:将无疾病-->有疾病只是增多了检查,但有疾病-->无疾病却是增加了生命危险。以二分类为例,由此引入了“代价矩阵”(cost matrix)。

Image Name

在非均等错误代价下,我们希望的是最小化“总体代价”,这样“代价敏感”的错误率为:

Image Name

同样对于ROC曲线,在非均等错误代价下,演变成了“代价曲线”,代价曲线横轴是取值在[0,1]之间的正例概率代价,式中p表示正例的概率,纵轴是取值为[0,1]的归一化代价。

Image Name

Image Name

代价曲线的绘制很简单:设ROC曲线上一点的坐标为(TPR,FPR) ,则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR) 到(1,FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC 曲线土的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如图所示:

Image Name

2.4 比较检验

在比较学习器泛化性能的过程中,统计假设检验(hypothesis test)为学习器性能比较提供了重要依据,即若A在某测试集上的性能优于B,那A学习器比B好的把握有多大。下面分析一错误率为性能度量,

2.4.1 假设检验

2.4.2 交叉验证t检验

2.4.3 McNemar检验

2.4.4 Friedman检验与Neme后续检验

二项检验,后续补充,

2.5 偏差与方差

在学习算法中,偏差指的是预测的期望值与真实值的偏差,方差则是每一次预测值与预测值的期望之间的均方误差。偏差体现了学习器预测的准确度(拟合能力),而方差体现了学习器预测的稳定性。通过对泛化误差的进行分解,可以得到

泛化误差可分解为偏差、方差与噪声之和

方差和偏差具有矛盾性,这就是常说的偏差-方差窘境(bias-variance dilamma),随着训练程度的提升,期望预测值与真实值之间的差异越来越小,即偏差越来越小,但是另一方面,随着训练程度加大,学习算法对数据集的波动越来越敏感,方差值越来越大。换句话说:在欠拟合时,偏差主导泛化误差,而训练到一定程度后,偏差越来越小,方差主导了泛化误差。因此训练也不要贪杯,适度辄止

 参考:西瓜书学习笔记(2)--模型的评估与选择 - Heywhale.com

### 关于周志华机器学习》(西瓜书)第章的学习笔记 #### 模型评估选择概述 模型评估选择机器学习领域的重要组成部分,旨在通过合理的方法评价不同模型的表现并挑选最优者。这一过程不仅涉及如何衡量单个模型的好坏,还包括怎样对比多个候选方案以做出最佳决策。 #### 偏差、方差和噪声的概念解析 偏差度量了学习算法的期望预测实际结果之间的差距,反映了算法自身的拟合精度;方差描述的是相同规模训练集变化引起的学习效果波动情况,体现了数据扰动带来的影响;而噪声则设定了给定任务下所有可能采用的学习方法能达到的最佳预期泛化误差界限,揭示了问题本身固有的复杂性和挑战性[^2]。 #### 性能度量指标——P-R图及其应用 为了更直观地展示各类分类器的工作特性,通常会绘制精确率-召回率(Precision-Recall, P-R)曲线来辅助分析。当面对多组实验结果时,可以通过观察这些图形相互间的位置关系来进行优劣评判:如果某条曲线始终位于另一条之上,则表明前者具有更好的整体表现;而对于那些存在交点的情况,则需进一步计算各自下方区域面积大小作为判断依据之一。此外,“平衡点”作为一种特殊的性能测度,在特定条件下也能提供有价值的参考信息[^3]。 #### 偏差-方差分解理论简介 该理论为理解学习算法的一般化能力提供了框架性的指导思路,通过对平均测试错误率实施拆分操作,可以深入剖析导致过拟合现象背后的原因所在,并据此探索改进措施的方向。具体而言,总误差由三部分构成——不可约减误差点(即噪声)、平方形式表达出来的偏差项以及线性累加而成的方差成分[^4]。 ```python import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import precision_recall_curve, auc def evaluate_model_performance(model, X, y): """ 计算并返回PR曲线下面积(AUC),用于量化模型的整体性能。 参数: model (object): 已经训练好的分类模型实例。 X (array-like of shape (n_samples, n_features)): 测试特征矩阵。 y (array-like of shape (n_samples,)): 对应的真实标签向量。 返回: float: PR AUC得分。 """ # 划分训练集/验证集 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2) # 使用训练集拟合模型 model.fit(X_train, y_train) # 获取验证集中各观测对应的概率估计值 probas_pred = model.predict_proba(X_val)[:, 1] # 绘制PR曲线并求得AUC分数 precisions, recalls, _ = precision_recall_curve(y_val, probas_pred) pr_auc_score = auc(recalls, precisions) return pr_auc_score ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值