机器学习之模型评估与选择

一、模型评估与选择

   分为五部分:1、经验误差及过拟合;2、评估方法‘;3、性能度量’;4、比较检验;5、偏差与方差。

1、经验误差与过拟合

   错误率(error rate):分类错误的样本数占总样本数。
   精度(accuracy):1-错误率。
   误差(error):学习器的实际预测输出和样本的真实输出的差异。在训练集上的是训练误差,在新样本上的是泛化误差。
   过拟合(overfitting):训练误差小,泛化误差却很大。因为机器学习面临的问题都是NP难的,过拟合无法避免,只能缓解。
   欠拟合(underfitting):训练误差大,泛化误差也大,容易克服。
   模型选择(model selection):理想的是对泛化误差评估,选择小的,但是无法直接得到泛化误差,训练误差因为过拟合存在不适合作为标准,那么就要考虑其他的评估方法进行评估和选择。

2、评估方法

   设置测试集,利用测试误差作为泛化误差的近似,通常假设测试集样本也是从样本真实分布中独立同分布采样而得,测试集应尽可能与训练集互斥。对数据集D进行适当的处理,产生训练集S和测试集T,常见的有以下几种方法:
   (1)留出法(hold-out):将数据集D分为两个互斥的集合,划分要尽可能保持数据分布的一致性。比如分类问题中可以进行按比例分层采样(适合比例差异不太大的情况)。单次使用留出法往往不可靠,一般进行多次随机划分,重复试验取平均值作为评估结果。常见的做法是:将大约2/3~4/5的样本用于训练,剩余样本作为测试。一般而言。测试集至少应包含30个样例。从偏差-方差角度理解,测试集小,评估结果方差大,测试集大,评估结果偏差大。
   (2)交叉验证法(cross validation):将数据集划分为k个互斥子集,每个子集尽可能保持数据分布一致性(分层采样),其中k-1个用于模型的训练,剩余的1个用于测试,从而进行k次训练和测试,求得到k个模型及对模型性能的评估,基于这些评价结果,计算出其平均性能。通常将其用于模型的调优,一旦找到满意的超参值,就可以应用于全部训练数据上重新训练模型,在使用独立的测试集进行最终评价。k一般取10,若数据集过大则取5,也有取20的。与留出法类似,每次划分都随机使用p次不同的划分,最终的评估结果是p次k折交叉验证结果的均值,如10次10折交叉验证。交叉验证的特例:留一法,每个子集只包含一个样本,所以不受划分方式的影响。
   (3)自助法(bootstrapping):就是有放回采样。为了解决因减少训练样本规模不同而造成的影响,可以直击以自助采样法(bootstrap sampling)为基础。给定包含m个样本的数据集D,每次从D中挑选一个样本,放入D’,然后在将其放回D中。该过程执行m次后,得到含有m个样本的数据集D’,这就是自助采样。通过自助采样,初始数据集D中,约有36.8%的样本未出现在采样数据集D’中,将D’作为训练集,将D\D’作为测试集。优点:在数据量较小,难以有效划分时很有用。可在初始数据集中产生多个不同的训练集,对集成学习有好处。缺点:改变了初始数据集的分布,会引入估计偏差,在初始数据量足够时,交叉验证和留出法更常用。
   (4)调参与最终模型(parameter tuning):除了要对算法进行选择,还要对算法的参数进行设定。学习算法需要单独进行优化的参数,也就是调优参数,也称为超参,如:逻辑斯蒂回归的正则化系数,决策树的深度参数。通常,对每个参数选择一个范围和变化步长,得到几个候选参数,然后在这些候选值中产生选定值。在模型训练结束后,学习算法和参数配置已经选定,我们还要用数据集D完整地重新训练该模型,才可以提交给用户。我们用测试集上的判别效果来估计模型的实际使用的泛化能力,把训练集另外划分为训练集和验证集,例如k折交叉验证,基于验证集的性能来进行模型选择和调参。

3、性能度量

   性能度量就是衡量模型泛化能力的评价标准。但使用不同的性能度量也会导致不同的评判结果,所以模型的好坏是相对的,因此模型的好坏不仅取决于算法和数据,还决定于任务需求。
   回归任务中最常用的性能度量是“均方误差”,是预测值与真实类标差的平方和的均值。
   混淆矩阵:以二分类混淆矩阵为基础,多分类可以将除目标类之外的其他类别当成一类(反例)。由下图可知,混淆矩阵由真正、假正、真反、假反组成。可以计算精准率,召回率,F1分数和准确率。
  在这里插入图片描述
   (1)准确率:既适用于二分类任务,也适用多分类任务。是我们使用最常见的指标,是一个关于全局的指标,关注的是预测的效果。不适用于极端情况。
在这里插入图片描述

   (2)查准率、查全率:(又称精准率和召回率)
  查准率:Precision=TP/(TP+FP) ,即所有预测为正类的结果中,真正的正类的比例
  查全率:Recall=TP/(TP+FN),又称召回率。即真正的正类中,被分类器找出来的比例。
  不同的问题中,判别标准不同。对于推荐系统,更侧重于查准率(即推荐的结果中,用户真正感兴趣的比例);对于医学诊断系统,更侧重于查全率(即疾病被发现的比例)2/F1=1/P+1/R 
   (3)P-R曲线图:它是以查准率为纵轴,查全率为横轴的曲线图,按学习器的预测结果对样本排序,排在前面的是最有可能是正例的样本。按次顺序计算样本的查准率和查全率作图。两个学习器比较时,如果一个P-R被另一个完全包围,则面积大的更好。但是通常会有交叉这时就要用“平衡点”(BEP)来度量,它是查准率=查全率时的取值,在该点哪个大哪个好。但是BEP过于简化,更常用F1度量。
   (4)F1度量:F1 = 2XTP/(样本总数+TP-TN).
   (5)当有多个二分类混淆矩阵时,我们希望在n各二分类混淆矩阵上综合考察查准率和查全率。这时一方面可以分别计算查准率,查全率,再平均得到宏查准率等。还可以先将混淆矩阵的对应元素平均,再基于这些平均值计算出微查准率等。
   (6)ROC曲线:也是根据学习器的预测结果,对样本进行排序,按该顺序逐个对样本进行正例预测,每次计算出召回率作为纵轴,精准率作为横轴。ROC曲线的对角线对应于随机猜想模型,点(0,1)对应了所有正例排在所有反例之前的理想模型。面积大,完全包围的那个ROC曲线更好。但有交叉时,通常比较AUC,就是ROC曲线下的面积。
在这里插入图片描述
    真正例率:TPR=TP/(TP+FN)
    假正例率:FPR=FP/(TN+FP),刻画的是分类器错认为正类的负实例占所有负实例的比例
    以真正例率为纵轴、假正例率为横轴作图,就得到ROC曲线。在ROC图中,对角线对应于随机猜想模型。点(0,1)对应于理想模型。通常ROC曲线越靠近点(0,1)越好。
   (7)AUC面积:ROC曲线下的面积。[0.5,1]之间,是基于ROC衍生的非常好的可量化的评价标准,ROC曲线是越陡约好,即AUC越大越好,理想情况下,面积为1。
   AUC物理意义解读:正常分类模型只会设置一个阈值,即不存在面积的说法,ROC考虑所有的分类阈值的情况,可以解读为正样本排在负样本之前的概率。
   (8)ROC/AUC使用解读:
   ROC/AUC能够反应模型在一个数据集上的排序的准确程度;
   同时考虑了模型对正例和负例的分类能力,在样本分布不均的情况下依然对模型做出合理的评估。

4、比较检验

   有了性能度量方法,就可以直接比较不同模型的性能了吗?不可以,首先,我们希望比较的是泛化性能,然而通过实验评估方法我们获得的是测试集上的性能,两者的对比结果可能未必相同。那么如何比较学习器的性能呢?
   统计假设检验:基于假设检验的结果,我们推断:若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个把握有多大。
   (1)假设检验:根据测试错误率推出泛化错误率的分布。(直观上二者接近的可能性比较大)
   二项式检验:对错误率小于定值定值a这样的假设进行检验
   t检验: 错误率都集中分布在某个定值周围的检验手段(度娘具体介绍:t分布)
   (2)交叉验证t检验:比较两个学习器优劣的方法:如果两个学习器性能相同,则他们使用相同的训练/测试集得到的错误率应该相同。具体方法:对“学习器A和B性能相同”这个假设做T检验,计算出均值和方差,如果小于某个你定的阈值,那么就可以认为是相同,否则取平均错误小的那个作为性能更优的模型。
   (3)McNemar检验:二分类问题除了错误率获取两个分类器的分类结果差别:
把两者都分对了,都分错了一个对一个错都罗列出来。
   (4)Friedman检验和Nemenyi后续检验:多个算法进行比较的方法(进行排序)。

5、偏差与方差

   偏差和方差分别是用于衡量一个模型泛化误差的两方面:
  模型偏差:模型预测的期望值和真实值之间的差,模型的拟合能力。
  模型方差:模型预测的期望值和预测值之间的差的平方,模型的稳定性。
当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。
当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。还是因为模型简单,所以偏差会很大。

训练集,测试集,验证集

   通常,在训练有监督的机器学习模型的时候,会将数据划分为训练集、验证集和测试集,划分比例一般为0.6 : 0.2 : 0.2
   对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的、泛化能力最佳的模型。
   (1)训练集(Training set):作用是用来拟合模型,通过设置分类器的参数,训练分类模型。后续结合验证集作用时,会选出同一参数的不同取值,拟合出多个分类器。
   (2)验证集(Cross Validation set):作用是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。如svm中的参数c和核函数等。
   (3)测试集(Test set):通过训练集和验证集得出最优模型后,使用测试集进行模型预测。用来衡量该最优模型的性能和分类能力。即可以把测试集当做从来不存在的数据集,当已经确定模型参数后,使用测试集进行模型性能评价。
   注:通常先用验证集进行调参,使用训练集进行训练,测试集进行泛化能力测试。
   对原始数据进行三个数据集的划分,也是为了防止模型过拟合。当使用了所有的原始数据去训练模型,得到的结果很可能是该模型最大程度地拟合了原始数据,亦即该模型是为了拟合所有原始数据而存在。当新的样本出现,再使用该模型进行预测,效果可能还不如只使用一部分数据训练的模型。

二、sklearn之Model selection and evaluation

英文文档
中文文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值