《机器学习》系列总结(导学/复习)—第二章 模型评估与选择
在典型的机器学习过程中,什么模型更好,或者怎样训练出的的模型能更好的适用于没见过的数据(能够更准确的预测新的数据样本的类别等)。也就是说,我们的目标是能够让学得得模型泛化能力强!错误率低,精度高。
要到达此目标,我们得有一个评价的方式,以此确定怎么选择模型
模型选择的关键:
如何获得测试结果?–>评估方法
如何评估性能优劣?–>性能度量
如何判断实质差别?–>比较检验
一、经验误差与过拟合
1.1 错误率、误差
学习器或者模型在预测时总会造成分类错误,那么变存在一个错误率的概念。而误差则为样本真实输出与学习器预测输出之间的差异
-
错误率: 分类错误的样本数占样本总数的比例。
m
个样本里a
个样本分类错误,则错误率E=a/m
。 -
精度:
精度=1-E
-
误差:样本真实输出与预测输出之间的差异。
ε=y-yˊ
-
训练(经验)误差:在训练集上的误差,亦称“训练误差”
-
测试误差:在测试集上的误差
-
泛化误差:在新样本上的误差
这里其实也能看出来,我们最希望的是让泛化误差小
但由于我们事先不知道新样本的特征,我们只能去努力减小训练误差(经验误差)
另外很多能在训练集上分类错误率为零,但多数这类学习器并不是很好。很有可能过拟合了。
eg:A死背某道数学题,没有理解。虽然这道数学题会了,但考试换了个描述的考法,就不会了。B总结这道题的做法,虽然这道数学题做的没A快,但考试遇到同类型其他描述时,B知道做的方法,最后就做出来。
-
1.2 过拟合(overfitting)
学习器把训练样本学习的”太好“,导致泛化性能下降
解决办法:
- 优化目标正则项
- early stop(早停) ----也就是说训练到一定程度就不要继续训练了
1.3 欠拟合(underfitting)
对训练样本的一般性质尚未学好
一些解决思路:增加训练轮次,决策树类型拓展分支
泛化误差\训练误差 | 低 | 高 |
---|---|---|
低 | 好 | bug?训练样本都没训好,还能适用其他的? |
高 | 过拟合 | 欠拟合 |
二、评估方法
这里最开始看到可能会产生疑惑。大家请记住,强调的是测试集部分,因为我们想通过测试集来进行测试学习器对新样本的判别能力。测试集中我们有真实的输出结果,可以用来判断学习器是否学习的好。
既然如此,测试集怎么选定就很重要!!!也就是我们要评估,关键在于获得测试集。
一般情况下:测试误差 ≈ 泛化误差
测试集应该与训练集“互斥”
互斥的原因在于,如果这个学习器已经见过了数据集中的某条记录,如果把这条记录又作为测试集里的一条记录数据。那当进行测试时,对于这一条记录,学习器它肯定是认识,能够分辨的,所以这样划分是不太又用的。
数据集中划分训练集和测试集的常见做法:
- 留出法
- 交叉验证法
- 自助法
2.1 留出法
暴力直接,自己拍脑袋划分就行,将数据集划分成两个互斥的集合即可。
注意:
- 直接将数据集划分为两个互斥集合。数据集=训练集+测试集
- 训练/测试集划分要尽可能保持数据分布的一致性(避免划分引起的误差)
- 一般若干次随机划分、重复进行实验评估后取平均值
- 训练/测试样本比例通常为2/3~4/5(测试集不能太大、不能太小 )
2.2 交叉验证法
又叫k-折交叉验证法
将数据集分层采样划分为k
个大小相似的互斥子集,即D=D_1∪D_2∪...∪D_k, D_i∩D_j=∅(i≠j)
。且要求每个子集尽可能保证数据分布一致(D
中分层采样得到)。
然后我们每次用k-1
个子集的并集作为训练集,剩余子集作为测试集,最终返回k
个测试结果的均值,k
常用10
一般我们进行若干次随机划分,重复进行实验评估后取平均值(k=m
留一法)
这种方法的评估结果被认为较为准确,但计算开销大
上述过程总体的思想就是,会选k
次,最后训练出k
个学习器,然后求平均,这样可以尽可能的利用数据集
好处:
- 解决数据量不够大的问题
- 解决参数调优问题
(下图展示10折交叉验证,图片来自西瓜书)
2.3 自助法
直接以自助采样法为基础,也称“有放回采样”、“可重复采样“。
它的过程可以这样理解:
- 有一个数据集
D
,它里面有m
个样本,假设采样后生成的数据集为D'
- 每次从D中随机选取一个样本,将其加入到
D'
中,之后再将该样本放回D
中,注意此时D中样本数量仍然不变,仍为m
个样本 - 重复执行第
2
步m
次 - 最终得到包含
m
个样本数据的集合D'
。
对于D
中的一部分数据,肯定会在D'
中多次出现,但是也会有一部分数据在D'
不出现。
样本在m
次采样中始终不被采样的概率是(1-1/m)^m
,取极限约等于0.368
说明数据集D
中约有36.8%的样本不会出现在D'
中,所以我们可以拿D'
作为测试集,D\D'
用作训练集
优势:
- 训练集与原样本集同规模
- 使用数据集小,划分难
这种类型进行测试的结果叫做包外估计
2.4 “调参”与最终模型
大部分学习算法都有参数需要设定,参数设置不同,学得的模型性能也会有差别,比如设置训练轮次、学习率等。因此进行模型评估与选择时,还需对算法的参数进行设定,即参数调节,简称调参。参数调得好不好往往对最终性能有关键影响
注意区分:
- 算法的参数:一般由人工设定,亦称“超参数”
- 模型的参数:一般由学习确定
这里新定义一个概念验证集:在模型评估与选择中用于评估测试的数据集。用于模型选择和调参
类别 | 验证集 | 测试集 |
---|---|---|
是否被训练到 | 否 | 否 |
作用 | 用于调超参数,监控模型是否发生过拟合(以决定是否停止训练) | 为了评估最终模型泛化能力 |
使用次数 | 多次使用,以不断调参 | 仅仅使用一次 |
三、性能度量
用来衡量模型泛化能力的评价标准,反应任务的需求。性能度量是一种方式,采取这种方式(或标准)来衡量模型的泛化能力。
采用不同的性能度量往往会得到不同的评判结果。
不同场景下通常所采取的性能度量方式
在分类任务中,常常采用错误率和精度两种性能度量
-
错误率:分错样本占样本总数的比例。
耐心看,虽然这公式第一眼看好像长得乱七八糟,但是实际很简单,
m
个样本数据,f(xi)
代表第i
个样本在模型预测下的结果,yi
为该样本的实际结果,当两者不相等时,加一,最后用这个和除以m
。完整看即为预测错误的样本数量除以样本总数,也就是定义啦!!! -
精度:分对样本占样本总数的比例。
将预测对的样本数除以样本总数,也就等于
1-E
在信息检索、Web搜索等场景中经常需要衡量预测出来的正例中真的是正例的比率, 所有正例中被预测出来是正例的比率。此时进行描述采用查准率和查全率更为合适。
-
查准率P:
P = T P ( T P + F P ) P=\frac{TP}{(TP+FP)} P=(TP+FP)TP -
查全率R:
R = T P T P + F N R = \frac{TP}{TP+FN} R=TP+FNTP -
P-R曲线:查准率P做纵轴,查全率R做横轴作图,得到的曲线即为查准率-查全率曲线(P-R曲线)。显示该曲线的图即为“P-R图”。若一个学习器的P-R曲线包住另一个学习器的P-R曲线,则断言前者性能优于后者
-
平衡点BEP:一种综合查准率和查全率的度量方式,它是查准率=查全率时的取值。基于BEP进行比较时,认为BEP值大的学习器更优秀
在此定义一个概念调和平均数:
1 F 1 = 1 2 ( 1 P + 1 R ) \frac{1}{F_1} = \frac{1}{2}(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)
比上述所说BEP更常用的度量方式是F₁
度量,0<F₁<1
,F₁
越大越好:
另外相较于F₁
更加一般的形式:
β = 1
:就是标准的F₁
β > 1
:偏重查全率(逃犯信息检索)β < 1
:偏重查准率(商品推荐系统)
ROC曲线:以“假正例率”为横轴,“真正例率”为纵轴可得到的曲线,全称“受试者工作特征”。
ROC曲线绘制方法:给定m^+
个正例和m^-
个负例,根据学习器预测结果对样例进行排序,将分类阈值设为每个样例的预测值,当前标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为(x,y+1/m^+ )
;当前若为假正例,则对应标记点的坐标为(x+1/m^- ,y)
,然后用线段连接相邻点.
ROC曲线衡量比较方式:
- 若某个学习器的ROC曲线被另一个学习器的曲线“包住”,则后者性能优于前者;
- 如果曲线交叉,可以根据ROC曲线下面积大小进行比较,这个面积也叫做AUC值
AUC衡量了样本预测的排序质量
AUC可估算为:
排序损失定义为:
另外AUC = 1 - "损失"
,也就是说“损失” = 1 - AUC
代价敏感错误率
往往日常生活中,如果我们犯错,会造成一定的损失,而犯不同的错往往会造成不同的损失。此时我们就需要考虑“非均等代价”,意思是说,需要考虑模型预测错时“付出的”代价时不均等的。
代价敏感错误率:
四、比较检验
用来判断实质差别
我们在采用不同评估方式测得了学习器某个性能的度量结果,但我们最后如何对其进行比较,选择更好的呢?此处重点在于如何进行比较。
-
假设检验-二项检验
记泛化错误率为 ε,测试错误率为ε实际 ,假定测试样本从 ε<= ε0样本总体分布中独立采样而来,我们可以使用“二项检验”
-
假设检验-t检验
面对多次重复留出法或者交叉验证法进行多次训练/测试时
如果两个学习器比较(同数据集)
-
交叉验证 t 检验 (基于成对 t 检验)
k 折交叉验证; 5*2交叉验证
-
McNemar 检验 (基于列联表,卡方检验)
如果多学习器比较(一组数据)
- Friedman + Nemenyi
- Friedman检验 (基于序值,F检验; 判断”是否都相同”)
- Nemenyi 后续检验 (基于序值,进一步判断两两差别)
五、偏差与方差
偏差-方差分解可以用来解释学习算法的泛化性能。
泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度共同决定
一般而言,偏差与方差存在冲突:
- 训练不足时,学习器拟合能力不强,偏差主导(欠拟合)
- 随着训练程度加深,学习器 拟合能力逐渐增强,方差逐渐主导
- 训练充足后,学习器的拟合能力很强,方差主导(过拟合)
好的泛化性能:偏差小(充分拟合),且方差小(数据扰动影响小)