系列文章目录
【DataWhale机器学习吃瓜教程】 第一章 绪论
【DataWhale机器学习吃瓜教程】 第二章 模型评估与选择
文章目录
概述
这一章主要介绍机器学习模型的数据集划分方法、性能度量和比较检验。其中实践中比较常用到的是各类性能度量指标,如Precision、Recall、F1、ROC、AOC等。书中原文给出了非常多的证明,对于理解指标的目的和原理十分有帮助,但是要想完全掌握此章内容,还需在实践中多多加以利用,各个指标也都尤其使用场景和特点,需要持续总结,从书外的内容进行补充。后续有时间会再行记录补充。
一、数据集划分方法
1.1 留出法
直接将数据集
D
D
D划分为互斥的两个集合,如训练集
S
S
S和测试集
T
T
T,同时满足
D
=
S
∪
T
D=S\cup T
D=S∪T,
S
∩
T
=
Ø
S\cap T=\text {\O}
S∩T=Ø
划分时还需注意
- 保持数据分布一致性:如保持分类任务中,各类别数据在训练集和测试集的比例相似,从采样的角度来看,这被称作"分层采样"
- 多次随机划分取均值
- 训练集和测试集的比例问题: S S S太大, T T T的评估结果就可能不够稳定; T T T太大,则 S S S与 D D D的差异就可能大,模型可能学不全。所以一般取2/3~4/5用作训练集
1.2 交叉验证法
也称“k折交叉验证”,先将数据集 D D D按分层采样的方法,尽可能保持数据分布的一致性,划分为k个大小相同的子集,取k-1个子集做训练,剩下一个用于评估。这样共会产生k组实验结果,再对其取平均。对于k,最常用的取值为10,也有5、20等取值
1.3 自助法
以自助采样法为基础,即有放回地从 D D D中进行多次采样,假设 D D D共有m个样本,则有放回地采样m次构成 D ′ D' D′, D D D中会有样本多次出现在 D ′ D' D′中,也会有不出现的,不出现的概率为 lim m − > ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim\limits_{m->\infty}(1-\frac 1 m)^m=\frac 1 e\approx0.368 m−>∞lim(1−m1)m=e1≈0.368,即当选用 D ′ ∖ D D'\setminus D D′∖D作为测试集时,仍有36.8%约1/3的为测试数据,用以确保评估的真实性和有效性,又被称为“包外评估”
- 优势
- 适用于数据集较小、难以有效划分训练/测试集时
- 能从初始数据集中产生多个不同的训练集,对集成学习很友好
- 缺点
- 但会改变初始数据集的分布,在初始数据量足够时尽量不使用该方法
验证集
测试集用来判别模型在实际使用时的泛化能力,训练数据另外划分为训练集和验证集,验证集表现用来进行模型选择和调参
二、性能度量
2.1 错误率与精度
顾名思义!此处不记!
2.2 查准率、查全率与F1
查准率(Precision):
P
=
T
P
T
P
+
F
P
P =\frac {TP} {TP+FP}
P=TP+FPTP 代表预测对的正例占所有预测为正例的比重(上表第一列)
查全率(Recall):
R
=
T
P
T
P
+
F
N
R=\frac {TP} {TP+FN}
R=TP+FNTP 代表预测对的正例占所有真实为正例的比重(上表第一行)
例如希望选出所有好瓜,则可以通过增加选瓜数量实现,将所有瓜都选出来,好瓜自然也就都选出来了,此时查全率就会高,查准率则会低;若想让好瓜的比例尽可能高,则只挑选其中最有把握的,这样也会漏掉不少好瓜,则查准率高而查全率低。因此,查准率和查全率都很高往往很难达成。
因此,以查准率为纵轴,查全率为横轴作图,可以得到一条查准率-查全率曲线,即“P-R曲线”,用以综合考虑查准率与查全率
同时,更常用的是F1度量,它是二者的调和平均数
F 1 = 2 × P × R P + R = 2 × T P 样例总数 + T P − T N F1=\frac {2\times P \times R} {P+R}=\frac {2 \times TP} {样例总数+TP-TN} F1=P+R2×P×R=样例总数+TP−TN2×TP
其对二者可以分别进行加权,形式如下
F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R F_\beta =\frac {(1+\beta ^2)\times P \times R} {(\beta ^2 \times P)+R} Fβ=(β2×P)+R(1+β2)×P×R
可以看出,当 β > 1 \beta > 1 β>1时,查准率P权重更高;当 β < 1 \beta < 1 β<1时,查全率R权重更高;当 β = 1 \beta = 1 β=1时会退化为标准的F1
2.3 ROC与AOC
很多学习器在做分类时会产生一个预测值,然后将预测值与某个阈值进行比较,若预测值大于阈值,则分为正类,反之为负类。当该阈值确定时,不同学习器的性能可以用其预测正确的比例来评估,例如,我们肯定希望预测结果中的真正率越高越好,假正率越低越好,因此ROC就采用了该方法。
ROC(Receiver Operating Characteristic):受试者工作特征曲线,其本身可用于衡量学习器的性能,纵轴为真正例率(TPR),横轴为假正例率(FPR)。具体公式如下
T P R = T P T P + F N TPR=\frac {TP} {TP+FN} TPR=TP+FNTP 除表格第一行,预测为正实际也为正占正的比例,正例里预测对的比例,应提升该项
F P R = F P T N + F P FPR=\frac {FP} {TN+FP} FPR=TN+FPFP 除表格第二行,预测为正实际为反占反的比例,反例里预测错的比例,应降低该项
进行学习器的比较时,若一个学习器的 ROC 曲线被另个学习器的曲线完全“包住”,则后者的性能优于前者;若两个学习器的 ROC 曲线发生交叉,则较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) AUC=\frac 1 2 \sum\limits^{m-1}_{i=1}(x_{i+1}-x_i)\cdot (y_i+y_{i+1}) AUC=21i=1∑m−1(xi+1−xi)⋅(yi+yi+1)
三、比较检验
在从性能度量获取结果时,并不能直接通过比较大小的方式获得学习器的优劣结果,还需要从其他方面进行综合比较,如泛化性能、测试集的选取、算法本身的随机性等
3.1 假设检验
通过检测错误率估算泛化错误率的分布,来获取检测结果的置信度
常用的包括二项检验、t检验、交叉验证t检验、McNemar检验等
我的理解是二项检验是针对单次测试的测试错误率的,即已知单次测试集结果上学习器的测试错误率,直接通过二项分布计算泛化错误率最大值不超过某阈值的置信度;
t检验则是适用于多次实验下,已知有k个测试错误率,则计算测试错误率的均值和方差,采用t分布去计算泛化错误率的最大值;
McNemar检验则是考虑两学习器分类结果的异同,先假设二者没有性能差异,再通过卡方分布计算临界值,若超过临界值则推翻假设
四、偏差与方差
“偏差-方差分解”可以用以解释学习算法的泛化性能。
TODO
西瓜书P45 泛化误差的分解
简单来说,泛化误差可以分解为偏差、方差与噪声之和,形式如下:
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + ϵ 2 E(f;D)=bias^2(x)+var(x)+\epsilon^2 E(f;D)=bias2(x)+var(x)+ϵ2
偏差度量学习算法的期望预测和真实结果的偏离程度,刻画算法本身的拟合能力;
方差度量同样大小训练集的变动导致的学习性能的变化,刻画数据扰动造成的影响;
噪声表达当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画学习问题本身的难度
所以给定学习任务,要想取得更好的泛化性能,三者都应尽量小
一般来说,偏差与方差存在矛盾,训练不足时,模型的拟合能力不强,数据的扰动不足以使模型发生变化,此时偏差主导泛化错误率;当训练成都家申,模型拟合能力增强,数据扰动渐渐被学习到,方差逐渐开始主导;当训练充分,模型拟合能力已经很强,此时一点点轻微的扰动都可能导致模型性能的显著变化,容易过拟合。