《机器学习》 模型评估与选择

    从第一章中我们可以知道,具体的问题需要选择具体的算法和归纳偏好。那么如何来评价不同算法和模型的好坏呢,第二章就对这个问题做出了解答。从第二章中,我们可以看到对于模型评估的一套完整体系。


2.1 经验误差与过拟合

    错误率:分类错误的样本数占样本总数的比例。

    精度:(1-错误率),即分类正确的样本数占样本总数的比例。

    训练误差(经验误差):学习器在训练集上的误差。

    泛化误差:在新样本上的误差。这个误差越小,模型的效果越好。

    过拟合:学习器对训练样本学习过度,从而在新数据上表现差,没法适应新的数据样本。

    欠拟合:对训练样本中的一般规律都没学习好。


2.2 评估方法(数据集划分方法)

       我们知道只有一个数据集,如何同时利用这个数据进行模型训练和数据评估呢。很明显,测试集训练集应该尽量重合,否则测试集计算出的误差不能够代表学习器的泛化能力。那么我们可以想到,要对数据集进行划分,来分别进行训练和测试。

2.2.1 留出法

       直接将D划分为互斥的两部分D1和D2,在D1上训练出模型后,用D2来评估测试误差。

2.2.2 交叉验证(经常使用)

    交叉验证是将数据分为k个大小相似的互斥子集,每个子集尽可能保持分布的一致性,然后每次选出一个子集作为测试集,剩余子集作为训练集,这样可以得出一个评估结果,同样的方法,最后这k个子集分别作为测试集会得出k个评估结果,然后用这k个评估结果就可以算出一个平均值作为最后的结果。我们通常把这种交叉验证叫做K折交叉验证,而最常用的是10折交叉验证,即分成十个子集分别评估,如图2所示。

       值得注意的是,这里面只有一次划分数据集。在有的交叉验证中,会在每次交叉验证之前,重新随机划分数据集,这使得每次交叉验证时候的数据划分都不相同,如‘5×2‘交叉验证。

2.2.3 自助法

       前两种方法由于在测试时使用的是全部数据集的一个子集,这样就有可能引入偏差,而自主法就是一个比较好的解决方案,它以自助采样法为基础。自助采样法是说从有m个样本的数据集D中,随机抽取一个样本放入D'中,然后再将该样本放回D中,然后再次随机抽取,如此重复m次就有了一个新的数据集D',D'就是自助采样结果。然后用D'做训练集,D\D'(D中的非D'部分)做测试集。通常当样本数较少时采用这个方法会有比较好的效果。

2.2.4 调参与最终模型

      机器学习常常设计两种参数:第一种是算法的参数,亦称‘超参数’,数目常常在10以内;另外一种是模型的参数,数目可能很多,如深度学习的参数可能有上百亿个。两者调参方式相似,均是产生多个模型以后基于某种评估方法来进行选择;不同之处在于前者通常是由人工设定多个参数候选值产生模型,后者则是通过学习来产生多个候选模型。

    备注:训练/测试集的划分要尽可能保持数据分布一致性。单次划分往往不够稳定可靠,一般要采用若干次随机划分、重复进行实验评估后取平均值作为评估结果。训练/测试集的划分比例没有完美答案,训练样本多会使得模型更接近D,测试样本多会使得评估结果更可靠,这其中的取舍因人/场景而异。常见的训练/测试划分比例是2:1~4:1。【2】


2.3  性能度量

    有了测试样本集和训练样本集了,我们用什么具体的衡量模型泛化能力的评价标准来度量模型的好坏呢?

2.3.1 错误率与精度

    错误率和精度,这是最常用最直接的指标,也是最简单的指标,前面有提到。

2.3.2 查准率、查全率与F1

    (这个评价标准在许多论文的实验部分经常会有,因此要重点掌握)


    查准率(precision):又称准确率率。通俗意义:预测的正类里面有多少比例是分对了的。侧重找到的是某一类型,少找了没有关系。

    查全率(recall):又称召回率。通俗意义:数据里面的真实正类被查到了多少比例。侧重把某一类型全部找到,多找了也没关系。

    在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。当曲线有相交时,很难断言两者的优劣。真要判别时,“平衡点”(Break-Even Point)是一个不错的度量方法。但实际情况是,往往根据具体情况来判别,如购物网站给用户推荐商品时候,自然是要求推荐的质量较高,宁愿数量少点,也要推荐质量高,则要求较高的查准率。而对于网络安全而言,则要求不能漏掉攻击事件的报警,则对召回率要有较高的要求。


    F1:基于查准率和查全率的调和平均定义。可以通过改变F1度量的一般形式,从而表达出对查准率/和查全率的不同偏好,给出基于需求的定量评价。

2.3.3 ROC与AUC

    ROC曲线是说以真正例率TPR为纵轴,假正例率FPR为横轴画出的曲线。AUC(Area Under ROC Curve)是ROC包住的面积。目前没有用到,以后用到再补充。


2.3.4  代价敏感错误率与代价曲线

       有时我们针对不同场景,对假正例和假反例两种错误的代价是不同的,例如在医疗诊断的时候,对于假正例,把健康的人诊断为病人和假反例,把病人诊断为健康人,其后果代价是不同的,前者代价较小,最多就是麻烦下再多做些检查,而后者可能会导致患者错过诊疗时机,甚至付出生命代价。所以可以为不同错误类型赋予不同的权重,这就是代价敏感错误率的由来。

    从分错的代价角度,来看待模型的好坏。这里就不详细介绍了。

    (书中公式太多,我这里省略了许多)

2.4 比较校验

     上文我们介绍了实验评估方法和性能度量,我们是直接取得性能的值,然后比较结果么?实际上机器学习中性能的比较要复杂的多,因为:(1)我们希望比较的是泛化的性能,但是实际上我们对比的是测试集上的性能,两者的对比结果未必相同;(2)测试集上的性能与测试集的选择有很大关系,若包含的测试样例不同,结果也会不同;(3)许多机器学习算法具有一定的随机性,即使用相同的参数设置在同一个测试集上运行多次,其结果也会不同。因此我们提出了统计假设检验来进行机器学习性能对比。

     假设检验中的“假设”是对学习器泛化错误率分布的某种猜想或判断,然后通过假设的验证结果来对不同的学习器或模型的性能进行判断。比如假设“学习器A和B性能相同”,当该假设被拒绝时,说明学习器A和B具有显著差异,这时候错误率较低的学习器性能较优。

2.4.1假设检验

    假设检验的具体逻辑和使用方法是这样的:

    [1]设定一个假设,比如“一个机器学习真正的泛化错误率不大于0.3”

    [2]设定一个置信概率“显著度a”,a的一般取值为0.05、0.1;a代表的意思是当我们的假设成立的概率在(1-a,1]的范围内时,我们认为是成立的。

    [3]计算使假设在置信范围内成立的最大值是多少,比如根据上边[1]中的假设,要使泛化错误率不大于0.3成立,即泛化错误率小于0.3的概率大于(1-a)。要计算这个,我们要算出要使错误率大于0.3的概率之和小于a时的最大泛化错误率是多少。

    [4]比较计算出的满足假设的最大值和我们实际计算出的值,如果我们实际计算出来的错误率已经大于最大可能的错误率了,说明假设不成立。

    [5]在这里的假设中,假设不成立说明我们的学习器错误率要大于0.3啊,这是个很烂的学习器,我们还需要继续调优。

       在实际实验时,我们会多次使用留出法或交叉验证法进行多次训练/测试,那么我们实际上会得到多个测试错误率(这里假设为k个)。我们可以通过求这些错误率的平均和方差来将假设检验转换为自由度为k-1的 t 分布。通过查询 t 检验常用临界表可以很方便的计算出假设是否成立。(这几段主要参考【2】,书中许多公式还是很难表述的。)

2.4.2交叉验证t检验

    其中交叉验证 t检验是针对两种学习器之间性能的比较。

2.4.3 McNemar检验

      Mcnemar检验是针对配对四格表的一种分析方法。所谓配对四格表,其主要特征是用同样样品做处理前后的对比,或者做在同一个样品不同处理所体现的差异,类似的有配对t检验。样品做处理前后的对比,或者做在同一个样品不同处理所体现的差异,类似的有配对t检验。

2.4.4Freidman检验与Nemenyi后续检验(论文中可以拿来用)

       Friedman检验与Nemenyi后续检验是针对多个学习器之间性能的比较,可用来证明某一个算法明显优越于其它算法。(下次论文实验算法比较时,再专门写一章多个学习器之间性能的比较)

参考资料:

    1.周志华,《机器学习》.

    2.一起来读西瓜书:第二章 模型评估与选择.(以问题为导向)

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



猜你喜欢

转载自blog.csdn.net/qq_23291793/article/details/79614531