评估方法
所谓的评估方法,可以看做是如何分配已有的数据,去训练和测试模型。书中介绍了三种主要的评估方法,分别为留出法、交叉验证法和自助法(bootstrap)。
留出法就是将数据分为两部分,分别拿来训练和测试,通常是七三开。可以随机划分若干次,取每次结果的平均;
交叉验证将数据分为k部分,其中k-1部分训练,剩余一部分测试,这样重复k次,保证每一小部分都测试过一遍,也是取结果的平均。在样本量较小时,可以让k等于样本量,于是变为所谓的留一交叉验证;
bootstrap法对样本有放回的抽样,先获得和原样本量一样大的样本集用于训练,再用未被抽到的样本测试(原样本中约有36.8%的样本未被抽到)。要注意bootstrap法改变了数据分布形态,会带来误差,因此样本量足够时常用留出法和交叉验证法。甚至在样本量很大时,单一次留出法的评估结果就非常接近模型真实参数了。
通过评估确定算法以及算法的参数后,需要用所有数据重新训练一下模型,这个模型就是最终版本。(这一部分其实困扰我很久,就是我们在评估模型时,每次训练模型参数都是不一样的,虽然用平均正确率等指标作为整体评价,但参数选择哪次训练数据的?还是说取参数的平均?看了书中调参这部分后终于明白了,其实是没分清算法的参数和模型的参数这两个概念。首先我们要确定算法,比如是用逻辑回归还是SVM;然后确定算法的参数,比如逻辑回归是用几次方程,SVM选择哪种核函数;明确的算法和参数就是一个模型,比如我们可以获得逻辑回归一次方程模型、二次模型等等。再通过评估方法评价每种模型的表现结果,选择表现最好的模型;最后将所有数据都放到模型中训练,得到最终的模型的参数。)
性能度量
明确评估方法后,接下来就要确定根据哪些指标度量评估方法的结果(对评估方法结果的评估)。回归任务常用“均方误差”,不必多言;分类任务常用三种度量手段:错误率与精度,查准率、查全率与F1,ROC与AUC。
错误率与精度就是计算一下分类错误与正确的样本所占比例,最简单直观,但挖掘的还不够深;
查准率(precision,等同于阳性预测值)、查全率(recall,等同于敏感度)分别代表模型标记阳性中真阳性的比例,以及模型能够标记出的真阳性占所有真阳性的比例。F1指标是综合查准率和查全率的度量指标,F1 = 2 * P * R / (P + R),P为查准率,R为查全率。以查全率为横轴、差准率为纵轴可以画出P-R曲线。根据我们对准确率和查全率重视程度的不同,还可以规定F1的系数,使重视程度可以从F1中体现(此时应为F1的一般形式),具体系数用到时再翻书;
ROC比较熟悉了,P-R曲线其实也类似,都有对敏感度的度量,只不过ROC还关注假阳性率,P-R则关注阳性预测值。ROC和P-R都可以算曲线下面积,P-R的F1指标可以类比ROC的约登指数。我认为一般用ROC就够了。
代价曲线可以反映模型的期望总体代价,每一条ROC曲线对应一条代价曲线。代价曲线的具体意义和价值还不是很明白,以后用到时再来研究补充。
比较检验
这一部分其实就是对性能度量指标做统计检验,从而得出统计结论。比如单样本T检验,比较指标是否与设定值有显著差异;配对T检验(交叉验证T检验)、配对卡方检验(McNemar检验)比较不同算法在相同数据集上结果是否有显著差异;Friedman检验比较多个算法,再用Nemenyi进行事后检验。
整体来看模型的评估是自上而下的系统的过程。大前提是选择合适的算法及参数,再根据数据情况,选择合适的划分方法;接下来明确性能度量指标,通过重复的训练与测试,获得当前算法参数下模型的一组度量指标;最后对不同模型的度量指标进行统计检验,得出结论,即哪种算法参数下的模型更好。
偏差与方差
模型的推广能力,即泛化性能,有很多影响因素。归纳起来主要有三点:一是算法本身的拟合能力。比如选择的算法可能过于简单,无论怎么调参都无法抓住数据内部规律;二是算法对数据的拟合程度。比如算法本身合格,但选择参数过于捕捉或疏于捕捉训练数据的细节,也导致在新样本上效果不好;三是问题本身的难度,即无论任何算法都无法企及的与真实结果的差距。
泛化误差可以评价泛化性能,由偏差、方差和噪声组成。噪声反映了问题本身的难度,如同随机扰动般无法优化;偏差是通过某一训练集确定了模型后,训练集在该模型下的期望输出与真实标记的差别,反映了算法本身的拟合能力;方差是某一训练集确定了模型后,另一个训练集在该模型下的输出与训练集的标记之间的差别,反映了数据扰动的影响。
随着模型训练程度的加深,即对训练数据拟合的越来越优,偏差会越来越小;同时对应的方差有一个先减小后增大的过程,即模型由欠拟合逐渐到合适的拟合再逐渐过拟合。