模型评估和选择

一、经验误差与过拟合

1.误差

学习器的预测值与真是输出之间的差异称为“误差”。

我们把学习器在训练集上的误差称为“经验误差”或者“训练误差”。在新样本上的误差称为“泛化误差”。

2.过拟合与欠拟合

过拟合就是由于学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了。

欠拟合就是由于学习能力低下造成的,很多数据不在拟合的函数上。

关于过拟合和欠拟合,以及正则话,可以查看我的另一篇博客https://blog.csdn.net/naocanmani/article/details/83504339

二、评估方法 (即取样训练的方式)

1.留出法

留出法,就是将一整个数据集合(D)分为训练集(S)和测试机(T),并且D=S\cup T,S\cap T=\O,用测试机来评估其泛化误差。一般在使用留出法的时候采用“分层采样”,分层采样就是在每组样本(S,T)中,数据分布要尽量一致,即正例与反例的比例尽量一致。

另一个需要注意的方面是,单次留出法的使用不够稳定,因为对数据集的划分可以是多种多样的,所以一般可以使用多次留出法,随机划分数据。当训练集比较大的时候,测试集就会比较小,评估上就会不够准确;反之,训练集(S)比较小,那么这个训练出来的学习器与原来大集合(D),想要的学习器的差别就会比较大,降低了真实性,一般取2/3~4/5的样本用于训练。一般而言测试机至少要有30个样本。

2.交叉验证法

 将数据集(D)划分为k个大小相似的互斥子集,即D=D_1\cup D_2....\cup D_k,D_i\cap D_j=\O,D_i也是通过分层采样从D中得到,然后每次用k-1组D的子集进行训练,用剩余的一个子集作为测试集,可以得到k组“训练集/测试集”,交叉验证法与k有关,所以又叫“k折交叉验证

假设D的大小为m,如果k=m,则引出了该方法的一个特例——留一法(LOO),就相当于每组只有一个数据。优点是生成的模型与期望得到的模型很相近,缺点也很明显,就是当数据量很大时,运算开销很大。,且评估不准确。

3.自助法

假设数据集(D)的大小为m,自助法就是,每次随机从D中取出一个样本加入到D'中,然后再将该样本放回D,让该样本在下次取样的时候还是有可能取到,这样循环m次得到最终的D'。

样本在m次于洋的过程中始终不被采样到的概率是(1-\frac{1}{m})^m,取极限得到\lim_{m->\infty }{(1-\frac{1}{m})^m}=\frac{1}{e}\approx 0.368,也就是说,最终约有36.8%的样本没在D'中,那么我们可以用D\D'(D中除了D'以外的数据的集合)作为测试集,通过这样得到的测试结果称为“包外估计”。

适用范围:适用于数据集较小,难以有效划分训练集/测试集的时候很有用;继承学习。

三、性能度量(判断哪个算法更好)

1.回归任务中的度量

一般使用均方误差\frac{1}{m}\sum_{i=1}^{m}{(f(x_i)- y_i)^2},更一般的\int _{x\sim D}(f(x)- y)^2p(x)d_x

2.分类任务中的度量

2.1.错误率和精度

这两个概念很好理解,错误率就是分类错误的样本占总样本的比例,精度与其互补。

错误率e=\frac{1}{m}\sum_{i=1}^{m}{\mathbb{I}(f(x_i)\neq y_i)}   \mathbb{I}是逻辑判断。  精度就是acc=1-e 更一般的e=\int _{x\sim D}\mathbb{I}(f(x)\neq y)p(x)d_x

2.2.查准率、查全率、F1

查准率用来描述”检索出的信息有多少是用户感兴趣的“,查全率是”用户感兴趣的信息有多少呗检索出来了“。

正是情况预测结果
正例反例
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

查准率P与查全率R分别定义为:

P=\frac{TP}{TP+FP}         R=\frac{TP}{TP+FN}

查全率和查准率是一对矛盾的度量,查准率越高,查全率就会偏低,反之亦然。

 若一个学习器(C)的P-R曲线被另一个(B)”包住“,则说明B的性能比C好。当交叉的时候就难以判断,可以通过比较面积大小,但不太容易计算。我们可以用平衡点来评估,他是”查全率=查准率“的点,平衡点的性能更好。

    \frac{1}{F_1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R})= > F_1=\frac{2PR}{P+R}=\frac{2*TP}{M+TP-TN}  M表示样本总数

在不同的应用中,查准率和查全率的重视程度是不一样的,F1的一般形式\frac{1}{F_{\beta}}=\frac{1}{1+\beta^2}(\frac{1}{P}+\frac{\beta^2}{R})=>F_{\beta}=\frac{(1+\beta^2)PR}{\beta^2P+R}

β>0,β=1时,为F1,β>1时查全率有更大影响,β<1时查准率有更大影响

2.3.ROC与AUC

ROC全称为受试者工作特征,ROC纵轴”真正例率(TPR)“,横轴表示”假正例率“(FPR)

TPR=\frac{TP}{TP+FN}         FPR=\frac{FP}{FP+TN}

a图为理想情况下,b图为实际情况,因为实际项目中用的都是离散的数据。ROC与前面的P-R曲线类似,如果A被B包住,则B优于A。若交叉就要进行面积(AUC)判断,

AUC=\frac{1}{2}\sum_{i=1}^{m-1}{(x_{i+1}-x_i)(y_i+y_{i+1})}

2.4.代价敏感错误率与代价曲线

现实生活中,我们预测结果出错所产生的影响有时候是不一样的,比如对癌症的预测,如果把没癌症的预测为有癌症,则是增加一次医院的检查,但是如果把有癌症的预测为没癌症则丧失的是一条生命。

我们假设costij为第i个样本预测为j类的代价

上图的代价敏感错误率为 \frac{1}{m}(\sum_{x_i\in D^+}\mathbb{I}(f(x_i)\neq y_i)*cost_{01}+\sum_{x_i\in D^-}\mathbb{I}(f(x_i)\neq y_i)*cost_{10}) 类似的可以扩展到多分类。

在非均等条件下,ROC不能直接反应学习器的期望总体代价,代价曲线可以。横轴为取值在[0,1]的正例概率代价

P(+)cost=\frac{p*cost_{01}}{p*cost_{01}+(1-p)*cost_{10}}           p为样例为正例的概率。纵轴为取值为[0,1]的归一化代价。

四、比较检验

有了上面的性能度量和评估方法,那么我们如何对得到的性能度量结果进行比较呢,就要用到一下方法。(以错误率为性能度量)

1.假设检验

假设学习器的泛化错误率为e,测试错误率为e',那么繁华错误率被测得测试错误率为e'的概率为P(e';e)=\begin{pmatrix} m\\ e'*m \end{pmatrix}e^{e'*m}(1-e)^{m-e'*m}

1.1二项检验

一般化的,e<=e0,则在1-α的置信度内所能观测到的最大错误率计算

α通常取0.1,0.05等较小的数。

如果e'小于求得的临界值,那么我们认为在1-α的置信度内,泛化错误率不大于e0。

1.2t检验

在进行多次测试后,会得到多个错误率,此时可以使用t检验

假设得到k个测试错误率,e'_1,e'_2.....e'_k则求得他们的均值和方差。

\mu =\frac{1}{k}\sum_{i=1}^{k}e'_i,\sigma^2=\frac{1}{k-1}\sum_{i=1}^{k}{(e'_i-\mu)^2}

t=\frac{\sqrt{k}(\mu -e0)}{\sigma} 服从t分布

假设”u=e0“,显著度为α,可以计算出测试错误率均值为e0时,在1-α的置信度下的最大错误率,即临界值。

若|u-e0|在[t_{-\alpha/2},t_{\alpha/2}]内,则认为繁华错误率为e0,置信度为1-α。

以上两种方式都是对单个学习器进行检验。

2.交叉验证t检验(k折交叉验证)

对于两个学习器A,B,若使用k折交叉验证法,则我们对他们的每个错误率求差得到\Delta_1,\Delta_2....\Delta_k,若都等于0,显然两个学习器就没有差别;若不全为0,则我们对其做t检验若变量t=|\frac{\sqrt{k}\mu}{\sigma}|小于临界值  t_{\alpha/2,k-1},则认为A,B没有明显差别,反之u小的更优。

”5×2交叉验证“,避免训练集会有交叉重叠而导致错误率不独立。做5次2折交叉验证,每次都将数据打乱。其他的类似。

3.McNemar检验(二分类问题,留出法)

通过留出法,我们可以获得列联表,例如:

若两个学习器性能相同,那么e01=e10,那么|e01-e10|应当服从正太分布 

                                 t_{\chi ^2}=\frac{(|e_{01}-e_{10}|-1)^2}{e_{01}+e_{10}}

服从自由度为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,则两个算法不同

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值