一、经验误差与过拟合
1.误差
学习器的预测值与真是输出之间的差异称为“误差”。
我们把学习器在训练集上的误差称为“经验误差”或者“训练误差”。在新样本上的误差称为“泛化误差”。
2.过拟合与欠拟合
过拟合就是由于学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了。
欠拟合就是由于学习能力低下造成的,很多数据不在拟合的函数上。
关于过拟合和欠拟合,以及正则话,可以查看我的另一篇博客https://blog.youkuaiyun.com/naocanmani/article/details/83504339
二、评估方法 (即取样训练的方式)
1.留出法
留出法,就是将一整个数据集合(D)分为训练集(S)和测试机(T),并且,用测试机来评估其泛化误差。一般在使用留出法的时候采用“分层采样”,分层采样就是在每组样本(S,T)中,数据分布要尽量一致,即正例与反例的比例尽量一致。
另一个需要注意的方面是,单次留出法的使用不够稳定,因为对数据集的划分可以是多种多样的,所以一般可以使用多次留出法,随机划分数据。当训练集比较大的时候,测试集就会比较小,评估上就会不够准确;反之,训练集(S)比较小,那么这个训练出来的学习器与原来大集合(D),想要的学习器的差别就会比较大,降低了真实性,一般取2/3~4/5的样本用于训练。一般而言测试机至少要有30个样本。
2.交叉验证法
将数据集(D)划分为k个大小相似的互斥子集,即,D_i也是通过分层采样从D中得到,然后每次用k-1组D的子集进行训练,用剩余的一个子集作为测试集,可以得到k组“训练集/测试集”,交叉验证法与k有关,所以又叫“k折交叉验证”
假设D的大小为m,如果k=m,则引出了该方法的一个特例——留一法(LOO),就相当于每组只有一个数据。优点是生成的模型与期望得到的模型很相近,缺点也很明显,就是当数据量很大时,运算开销很大。,且评估不准确。
3.自助法
假设数据集(D)的大小为m,自助法就是,每次随机从D中取出一个样本加入到D'中,然后再将该样本放回D,让该样本在下次取样的时候还是有可能取到,这样循环m次得到最终的D'。
样本在m次于洋的过程中始终不被采样到的概率是,取极限得到
,也就是说,最终约有36.8%的样本没在D'中,那么我们可以用D\D'(D中除了D'以外的数据的集合)作为测试集,通过这样得到的测试结果称为“包外估计”。
适用范围:适用于数据集较小,难以有效划分训练集/测试集的时候很有用;继承学习。
三、性能度量(判断哪个算法更好)
1.回归任务中的度量
一般使用均方误差,更一般的
2.分类任务中的度量
2.1.错误率和精度
这两个概念很好理解,错误率就是分类错误的样本占总样本的比例,精度与其互补。
错误率
是逻辑判断。 精度就是acc=1-e 更一般的
2.2.查准率、查全率、F1
查准率用来描述”检索出的信息有多少是用户感兴趣的“,查全率是”用户感兴趣的信息有多少呗检索出来了“。
正是情况 | 预测结果 | |
正例 | 反例 | |
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
查准率P与查全率R分别定义为:
查全率和查准率是一对矛盾的度量,查准率越高,查全率就会偏低,反之亦然。
若一个学习器(C)的P-R曲线被另一个(B)”包住“,则说明B的性能比C好。当交叉的时候就难以判断,可以通过比较面积大小,但不太容易计算。我们可以用平衡点来评估,他是”查全率=查准率“的点,平衡点高的性能更好。
M表示样本总数
在不同的应用中,查准率和查全率的重视程度是不一样的,F1的一般形式
β>0,β=1时,为F1,β>1时查全率有更大影响,β<1时查准率有更大影响
2.3.ROC与AUC
ROC全称为受试者工作特征,ROC纵轴”真正例率(TPR)“,横轴表示”假正例率“(FPR)
a图为理想情况下,b图为实际情况,因为实际项目中用的都是离散的数据。ROC与前面的P-R曲线类似,如果A被B包住,则B优于A。若交叉就要进行面积(AUC)判断,
2.4.代价敏感错误率与代价曲线
现实生活中,我们预测结果出错所产生的影响有时候是不一样的,比如对癌症的预测,如果把没癌症的预测为有癌症,则是增加一次医院的检查,但是如果把有癌症的预测为没癌症则丧失的是一条生命。
我们假设costij为第i个样本预测为j类的代价
上图的代价敏感错误率为 类似的可以扩展到多分类。
在非均等条件下,ROC不能直接反应学习器的期望总体代价,代价曲线可以。横轴为取值在[0,1]的正例概率代价
p为样例为正例的概率。纵轴为取值为[0,1]的归一化代价。
四、比较检验
有了上面的性能度量和评估方法,那么我们如何对得到的性能度量结果进行比较呢,就要用到一下方法。(以错误率为性能度量)
1.假设检验
假设学习器的泛化错误率为e,测试错误率为e',那么繁华错误率被测得测试错误率为e'的概率为
1.1二项检验
一般化的,e<=e0,则在1-α的置信度内所能观测到的最大错误率计算
α通常取0.1,0.05等较小的数。
如果e'小于求得的临界值,那么我们认为在1-α的置信度内,泛化错误率不大于e0。
1.2t检验
在进行多次测试后,会得到多个错误率,此时可以使用t检验
假设得到k个测试错误率,则求得他们的均值和方差。
服从t分布
假设”u=e0“,显著度为α,可以计算出测试错误率均值为e0时,在1-α的置信度下的最大错误率,即临界值。
若|u-e0|在内,则认为繁华错误率为e0,置信度为1-α。
以上两种方式都是对单个学习器进行检验。
2.交叉验证t检验(k折交叉验证)
对于两个学习器A,B,若使用k折交叉验证法,则我们对他们的每个错误率求差得到,若都等于0,显然两个学习器就没有差别;若不全为0,则我们对其做t检验若变量
小于临界值
,则认为A,B没有明显差别,反之u小的更优。
”5×2交叉验证“,避免训练集会有交叉重叠而导致错误率不独立。做5次2折交叉验证,每次都将数据打乱。其他的类似。
3.McNemar检验(二分类问题,留出法)
通过留出法,我们可以获得列联表,例如:
若两个学习器性能相同,那么e01=e10,那么|e01-e10|应当服从正太分布
服从自由度为1的卡方分布,在置信度为1-α情况下,若上式结果小于临界值,即认为无明显差异,反之均值小的更优。
4.Friedman检验与Nemenyi后续检验
t检验和McNemar检验都是在一个集合上比较两个学习器。当有多个算法的时候我们可以使用两两比较,但更好的方法就是Friedman检验。
假设我们在D1,D2,D3,D4四个数据集上对算法A,B,C进行比较,使用留出法或交叉验证法。我们对测试结果由好到坏进行排序,标记为1,2,3....若性能相同则评分排名,例如下图:
令r_i表示第i个算法的平均值,则r_i的均值和方差为(k+1)*k/2/k=(k+1)/2和(k^2-1)/12N,k为算法个数,N为数据集个数。变量
k和N较大时,满足自由度为k-1的卡方分布。现在通常使用变量
若Friedman检验无法区分各算法的优劣,那么使用Nemenyi后续检验
若两算法的均值之差超出了临界值域CD,则两个算法不同