模型评估与选择
经验误差和过拟合
误差:模型的实际预测输出与赝本的真实输出之间的差异称为误差;
练误差:模型在训练集上的误差;
化误差:模型在新样本上的误差;
过拟合:为了在样本上表现更好,我们希望在训练样本中尽可能学习出适用于所有潜在样本的“普遍规律”,然而这会把训练样本的自身的特点当做了所有潜在样本都存在的一般性质。
欠拟合:训练样本的一般性质尚未学好。
eg:样本为两片绿色、带齿的树叶―――――新样本为无齿、绿色树叶与绿色纸片
结果:
过拟合:认为无齿、绿色不是树叶。
欠拟合:认为绿色纸片是树叶。
评估方法
为了保证泛化误差,我们需要一个测试集来得到测试误差,从而近似泛化误差,而测试集的选择要与训练集近可能的互斥。需从包含m个数据集中选出两个集合。
留出法
直接划分成为两个集合。(一般将2/3~4/5用于训练)
需要保证数据分布的一致性,例如在分类任务中,要保持不同类别的比例相同。
并且一般需要反复的对M个数据进行分割做训练与测试,最终取得平均值。
交叉验证法
将数据集在保证分布一致性的前提条件下划分为K个子集,每一次采用k-1个子集用于训练,剩下的做为测试,依次进行K次,并求得平均值。
又叫做“K折交叉验证”(K的取值最常为10)。
留一法(LOO):当出现一种特殊情况---一个子集中只剩下一个元素。
结果相对比较准确,但是当数据大的时候计算过于复杂。
自助法(bootstrapping)
在含有M个元素的数据集D中每次随机取一个元素放入D’,然后将该元素放回D,反复M次,将D’作为 训练集,D\D’作为测试集(D\D’表示集合减法)。
适用于数据较小、难以有效划分训练的时候很有用。
在M此中不被取到的概率为(1-1/m)的m次方。当m趋近于无限大的时候,此概率约为0.368.即D中大约有36.8%的元素没恩那个被选到D’。
调参与最终模型
机器学习会涉及一些参数的确定,调参的基本思路对每一种参数都训练模型,然后对应最好模型的参数就是最佳的参数。但是很多参数都是在实数集上选参数的值,这就变得不现实,可以每个参数设定一定的步长来改进。最然可能并不是最佳的参数,但也是折中的结果,并且参数数量会很多造成需要配置的参数种类巨大。
性能度量
回归任务中最常用的性能度量是“均方误差”
F(xi)是模型预测结果,yi是真是结果。
对于数据分布D和概率密度函数p(.),均方误差可以表述为
错误率与精度
错误率:错类错误的样本数占样本总数的比例。
精度: 1-错误率。
查准率、查全率、F1
查准率(P):模型挑出的正确的样本里有多少是真正正确的。
查全率(R):所有真正正确的样本有多少被模型选择了。
一般来说P/R是一堆矛盾的度量。一个偏高另一个会偏低。
Eg:所有的样本都被选中则R会偏小,若选出来的全是正确的则P会偏小。
P-R图:在预测结果中,我们把最可能正确的样本排在第一位,以此类推,然后将样本逐步认为是正确的,每次可以得到一个P、R。将P作为竖坐标,R为横坐标可以得到一条与P、R轴形成密封的曲线。
一般认为若A模型的PR图将B模型完全包含,则A的性能优于B。
若出现了交叉则比较其相应面积的大小,大的一方性能更优。
平衡点(BEP):PR图中P=R的点其中数值越大的点对应的模型更优。
F1:1/F1=0.5*(1/p+1/r)
Fb: 1/Fb=1/(1+b2)*(1/p+b2/r)
b>1则查全率更重要,b<1则查准律更重要。
ROC与AUC
很多机器学习是为样本产生一个实值或者概率预测,然后将这个值与阈值比较,大于阈值则分为正类。
我们将得到预测值最可能的放在首位以此类推,这样分类过程就相当于找一个截断点,截断点之前为正例。
若更重视查准率则往前选取截断点。
ROC(受试者工作特征):roc图像横竖坐标分别为假正例率和真正例率。
真正例率:选出来的正确的样本占真正正确的样本数的比例
假正例率:选出来的正确的样本占不正确的样本数的比例
ROC判断哪一个模型更好的依据也是比较所围成的面积(AUC)大小,大着更优。
代价敏感错误率与代价曲线
现实中要权衡不同错误的带来的代价,例如将健康的人诊断为病人和将病人诊断为健康的人带来的后果是不一样的。
以二分法为例,我们可以设置一个代价矩阵;
真实类别 |
预测类别 |
|
第0类 |
第1类 |
|
第0类 |
0 |
Cost01 |
第1类 |
Cost10 |
0 |
当判断正确的时候,其值为0。
代价敏感错误率:样本的由模型得到的错误的值与代价乘积之和/总样本。
在非均等代价下,ROC不能直接反应出学习器的期望总体代价,代价曲线则可以。
横轴为[0,1]的正例函数代价,其中p是样例为正例的概率。
纵轴是取值为[0,1]的归一化代价,其中FPR假正例率,FNR=1-TPR假反例率。
ROC每个点,对应代价平面上一条线。
例如,ROC上(TPR,FPR),计算出FNR=1-TPR,在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,面积则为该条件下期望的总体代价。所有线段下界面积,所有条件下学习器的期望总体代价。
比较检验
在机器学习性能比较评估的时候并不是简单的比较性能度量就OK,其内容比较复杂,需要考虑的大致包括以下:
1、 泛化能力
2、 测试集的选择问题
3、 算法存在一定随机性,相同的测试集结果也可能不一样。
假设校验
利用测试错误率估计推理出泛化错误率的分布。
测试错误率e’ ;总共有m个样本;泛化错误率e;
则全部分类正确的概率
符合二项分布。其对ϵ求导可得当ϵ=ϵ’的时候其概率有最大值。
例如,=0.3,则10个样本中3个被误分类的概率最大。
假设检验需要做的就是假设ϵ≤ϵ0在α的显著度下能否被拒绝。ϵ0是给定的一个概率值,意味着泛化错误率不能小于ϵ0,α也是一个值,常用取值是0.05。如果不能被拒绝,也就意味着有95%的置信度认为学习器的泛化错误率不大于ϵ0。
比如ϵ0=0.3,根据二项分布,如果是10个样本,那么有3个错误分类的概率最大。
具体计算时只需把错误样本数大于3的概率求和,看是否小于α即可。
关于假设校验这里给出一定得解释,我觉得写得还是很不错
https://www.zhihu.com/question/20254932
t检验(t-test)
多次重复留出法或是交叉验证法等进行多次训练/测试,得到多个测试错误率。
平均测试错误率μ和方差σ²为
考虑到这k个测试错误率可看作泛化错误率的独立采样,则变量
服从*度为k-1的t分布。
当测试错误率均值为ϵ0时,在1-α概率内观测到最大的错误率,即临界值。
双边假设,阴影部分各有α/2的面积;阴影部分范围为和。
若平均错误率μ与ϵ0之差|μ- ϵ0|位于临界值范围内,则可认为泛化错误率为ϵ0,置信度为1-α;否则,认为在该显著度下可认为泛化错误率与ϵ0有显著不同。
同样对于T检验,最开始理解起来比较困难,在一番百度之后看比较清楚,只是个人觉得书中缺少相应的相关只是,在此我也贴出相关知识链接。
https://baike.baidu.com/item/t%E6%A3%80%E9%AA%8C/9910799?fr=aladdin
以上只能对单个模型经行检测下面方法可对不同学习器的性能进行比较。
交叉验证t检验
两个学习器A、B,使用k折交叉验证法得到的两组测试错误率,就有多组在相同的第i折训练/测试集上得到的结果,可用k折交叉验证”成对t检验”来进行比较检验。若每一组相同次数得到的训练/测试集的测试错误率相同,两个学习器性能相同。
k折交叉验证产生k对测试错误率:对每一对结果求差;若性能相同则差是0。将一系列差看做一个集合,t检验,计算其差值的均值μ和方差σ²。
若变量小于临界值,则认为两个学习器的性能没有显著差别;否则,可认为两个学习器性能有显著差别,错误平均率小的那个学习器性能较优。
由于通常情况下样本的数量有限,在使用交叉验证等实验估计方法时,不同轮次的训练会有一定程度的重叠,为了缓解这一现象一般采用5*2交叉验证,即做五次二折交叉验证。
McNemar检验
Friedman检验与Nemenyi后续检验
偏差与方差
偏差-方差分解:是解释学习算法泛化性能的一种重要工具。
泛化误差:可以分解为偏差、方差与噪声之和。
偏差:度量了算法的期望预测与真实结果的偏离程度。
方差:度量了同样大小训练集变动导致的性能变化。
噪声:涉及问题本身的难度。
所以泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度共同决定的。
偏差与方差是有冲突的,即偏差-方差窘境(bias-variance dilemma)。
在训练程度不足时,学习器拟合程度不强,训练数据的扰动不足以产生显著变化,此时偏差主导泛化错误率。随着训练程度加深,学习器拟合能力增强,训练数据的扰动逐渐可以被学习器学到,方差逐渐主导泛化错误率。如果继续加深训练,则有可能发生过拟合。
该系列文章为本人学习《机器学习》(周志华著,清华大学出版社)一书过程中的笔记,部分类容由于无法正常写出采用贴图形式。