机器学习西瓜书(周志华)学习笔记(2)-模型评估与选择(上)

                                                   1.经验误差与过拟合

  1. 错误率(error rate):错误样本数占测试样本数的比例。
  2. 精度(accuracy):1-错误率。
  3. 误差(error):学习器的实际预测输出与样本的真实输出之间的差异。
  4. 训练误差(training error)/经验误差(empirical error):学习器在训练集上的误差。
  5. 泛化误差(generalization error):在新样本上的误差。想得到的就是泛化误差较小的模型。在实际希望中,需要的是在新样本上能表现很好的学习器,就需要从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,用以判别新样本,但如果学习器将训练样本中一些自身特点当作所有潜在样本都会具有的性质,就会导致泛化能力下降。这种现象称为“过拟合”,与其相对的就是“欠拟合”:训练一般性质尚未完成。
  6. 过拟合(overfitting):形象的讲就是学的太细致博学的生物教授在以往的经验上看到新的植物,比以往植物少一片叶子都不认为他们是同一类。把一些特点当做所有数据共有的特性。
  7. 欠拟合(underfitting):就是训练样本的性质没有学好预测与根据一定数据范围胡猜类似。书中例子就是训练树叶欠拟合就会误以为绿色都是树叶。

       相对于过拟合,欠拟合相对容易克服,如在神经网络里通过增加训练轮数,决策树扩展分支,过拟合相对麻烦,过拟合只能缓解不能避免,连接性训练网络的机器学习通常都会参数初始化,不同初始化的模型得到效果也不一样,哪个模型好要通过泛化误差进行评估。

      泛化误差不能直接获得,训练误差由于过拟合的存在不标准,现实中模型的评估与选择有以下几个方法:(只考虑泛化误差,没有考虑时间开销、存储开销、可解释性等方面,测试集的测试误差作为泛化误差)。

                                                   2.评估方法  

       我们只有一个包含m个样例的数据集D,既要训练又要测试。我们需要对D进行适当的处理,从中产生出训练集S和测试集T。 下面就是几种常见的做法。

1.1留出法(hold-out)

  • 留出法(hold-out):直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D=S∪T,S∩T=∅,在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
  • 要求:训练/测试集的划分要尽可能保持数据分布的一致性。

       假定D包含1000个样本,将其划分为S包含700个样本,T包含300个样本,用S进行训练以后,如果模型在T上有90个样本分类错误,那么其错误率为(90/300)*100%=30%,精度为1-30%=70%。

  • 注意:训练/测试集的划分要保持数据分布的一致性,避免额外偏差。这里的一致不仅要保持训练与测试数据比例,还要保持训练数据的样本类别数据一致,多分类任务中如果某一样本过多(Yk)那么模型更偏向于Yk,结果相似的就会归类于Yk。神经网络大多还存在一个数据样本打乱的算法,就是让数据随机训练,如果不这样,每一类样本集中训练,最后的结果更偏向于最后迭代训练的那类样本。常见数据集训练与测试的划分:2/3、4/5.(弊端一般划分不均匀)。
  • 对应课后习题2.1:数据集包含1000个样本,其中500个正例,500个反例,将其划分为包含70%样本的训练集和30%样本的测试集用于留出法评估,试估算共有多少种划分方式。

       解:这是一个组合问题,从500正反例中分别选出150正反例用于留出法评估,所以可能取法应该是种。

2.2交叉验证法(cross validation)

  1. 交叉验证法(cross validation):先将数据集D分为k个大小相似的互斥子集,即D=D1∪D2∪……∪Dk,Di∩Dj=空集(i≠j)。每次用K-1个子集的并集作为训练集,余下的子集作为测试集;获得K组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。

 

       显然,它的稳定性和保真性取决于k的取值。但是模型训练测试开销较大,每次划分训练测试都要耗费很多的时间,每次训练如果初始化参数训练的模型,也不一定是最准确的方式。

  • 留一法(Leave-One-Out):测试集只有一个样本。因此比起初始数据集,训练集只少了一个样本。
  • 对应课后习题2.2:数据集包含100个样本,其中正反例各一半,假定学习算法所产生的模型是将新样本预测为训练样本数较多的类别(训练样本数相同时进行随机猜测),试给出用10折交叉验证法和留一法分别对错误率进行评估所得的结果。

解:

10折交叉检验:由于每次训练样本中正反例数目一样,所以讲结果判断为正反例的概率也是一样的,所以错误率的期望是50%。

留一法:如果留下的是正例,训练样本中反例的数目比正例多一个,所以留出的样本会被判断是反例;同理,留出的是反例,则会被判断成正例,所以错误率是100%。

2.3自助法(bootstrapping)

       我们希望评估的是用整个D训练出的模型。但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。“自助法”正是解决了这样的问题。

  • 自助法(bootstrapping):给定包含m个样本的数据集D,每次随机从D 中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到。重复执行m 次,就可以得到包含m个样本的数据集D’。可以得知在m次采样中,样本始终不被采到的概率取极限为:

 

       通过自助采样,初始样本集D中大约有36.8%的样本没有出现在D’中,于是可以将D’作为训练集,D\D’作为测试集。自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用。

2.4调参(parameter tuning)与最终模型

  • 调参(parameter tuning):大多数学习算法都有些参数(parameter)需要设定,参数配置不同,学得模型的性能往往有显著差别。

       学习算法的很多参数是在实数范围内取值,因此,对每种参数取值都训练出模型来是不可行的。常用的做法是:对每个参数选定一个范围和步长λ,这样使得学习的过程变得可行。

       最后需要注意的是:当选定好模型和调参完成后,我们需要使用初始的数据集D重新训练模型,即让最初划分出来用于评估的测试集也被模型学习,增强模型的学习效果。

                                                     3.性能度量

  • 性能度量(performance measure):衡量模型泛化能力的评价标准,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。

      回归任务最常用的性能度量是:“均方误差”(mean squared error)预测任务中,给定样例集D={(x1,y1),(x2,y2),…,(xm,ym)},其中yi是对示例xi的真实标记,要评估学习器f的性能,就要把学习器预测结果f(x)与真实标记y进行比较。

更一般的,对于数据分布D和概率密度p(.),均方误差(mean square error)可描述为:

下面就分类任务中常用的性能度量进行介绍。

3.1错误率与精度

       在分类任务中,即预测离散值的问题,最常用的是错误率和精度。

  • 错误率:分类错误的样本数占样本总数的比例。
  • 精度:分类正确的样本数占样本总数的比例。易知:错误率+精度=1。

       对样例集D,分类错误率定义为:(指示函数正确1、错误0)

      精度定义为:

       更一般的,对于数据分布D和概率密度函数p(.),错误率可描述为:(精度类似)

3.2查准率(precision)、查全率(recall)与F1

       在信息检索中:

  • 查准率:推送给用户的内容用户是否感兴趣。
  • 查全率:所有用户感兴趣的内容中,我们推送出来了多少。

       对于二分类问题,分类结果混淆矩阵与查准/查全率定义如下:

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

对于分类结果混淆矩阵中的TP、FN等,左边的字母代表真实情况,右边的字母代表预测情况,具体如下表所示:

       查全率与查准率是一对矛盾的度量。正如我们能想到的那样:要让用户真正感兴趣的商品尽可能都被选出来(使查全率较高),就需要增加所选商品的数量,将所有的商品都选上,那么其中所有的感兴趣商品自然就都选上了(这样就会使得查准率变低);反之,若要使得选出的商品中,是用户真正感兴趣的商品比例尽可能高(使查准率较高),就只选最有把握的商品,那么就会漏掉一些本应该是感兴趣的商品(这样就会使得查全率变低)。

      “P-R曲线”正是描述查准/查全率变化的曲线,P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示:

       根据图像,若一个学习器的P-R曲线将另一个学习器的P-R曲线完全“包住”,则可断言后者的性能优于前者。如果二者出现交叉,就无法断言两学习器的优劣,只能判断在具体情况下谁更优。一般我们还是希望能比较出两个学习器的优劣,这样就采用比较二者曲线下的面积大小,面积大者更优。但是这个面积值不容易估算。

       为了解决上述问题,引入“平衡点BEP”(Break-Even Point)这样一个度量。它是P-R曲线与直线y=x相交的平衡点,该点上P=R。平衡点越高,对应的学习器越优。上图中,A优于B,B优于C。

       但是BEP还是过于简化了,更常用的是F1度量。它是基于查准率与查全率的调和平均:

 

       但是,考虑更一般的情况,不同应用对于查准率和查全率的重视程度有所不同。例如在商品推荐系统中,尽可能希望给用户推荐真正感情趣的商品,查准率就显得尤为重要;而在逃犯信息检索系统中,尽可能希望少漏掉逃犯,查全率就显得更重要。所以,我们提出F1的更一般形式Fβ,可以表达出对查准率/查全率不同偏好:(Fβ是加权调和平均)

  • β>1,查全率R有更大的影响;
  • β<1,查准率P有更大的影响;
  • β=1,退化为F1。

        有时候我们有多个二分类混淆矩阵,例如:多次训练或者在多个数据集上训练,那么估算全局性能的方法有两种,分为宏观和微观。

       宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均Pmacro-P和平均Rmacro-R,算出或F1,

         微观则是先将各混淆矩阵的对应元素进行平均,计算出混淆矩阵的平均TPFPTNFN,接着进行计算PR,进而求出F1

3.3ROC(Receiver Operating Characteristic)与AUC(Area Under ROC Curve)

       学习器对测试样本的评估结果一般为一个实值或概率预测。然后设定一个阈值,大于阈值为正例,小于阈值为负例,因此这个实值或预测结果的好坏,直接决定了学习器的泛化能力。实际上,将这些实值或概率预测进行排序,则排序的好坏决定了学习器的性能高低。

       ROC曲线正是从这个角度出发来研究学习器的泛化性能,ROC曲线与P-R曲线相似,根据学习器的预测结果,对样例进行排序,按照排序的顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到ROC曲线。不同的是ROC曲线以“真正例率”(True Positive Rate,简称TPR)为纵轴,横轴为“假正例率”(False Positive Rate,简称FPR),两者定义如下:

                                真正例率=真正例/(真正例+假反例)        假正例率=假正例/(真反例+假正例)

       如下的图(a)ROC曲线中,对角线对应于“随机猜测”模型,而点(0,1)对应于将所有正例排在所有反例之前的“理想模型”。

        分析图像,可以得知:当FN=0时,TN也必须0,对应点(1,1),反之也成立。我们可以画一个队列,试着使用不同的截断点(即阈值)去分割队列,来分析曲线的形状:

  • (0,0):TP=0、FP=0,将所有的样本都预测为反例;
  • (1,1):FN=0、TN=0,将所有的样本预测为正例;
  • (0,1):正例全部出现在负例之前的理想情况;
  • (1,0):负例全部出现在正例之前的最差情况。

       现实绘制曲线时,我们只有有限个测试样例用于绘图,因此只能得到如图(b)所示的近似ROC曲线。绘图过程具体如下:

       同样地,进行模型的性能比较时,若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。ROC曲线下的面积定义为AUC(Area Uder ROC Curve),不同于P-R的是,这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。AUC估算如下:(小三角形面积总和)

       形式化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定m+个正例和m-个反例,令D+和D-分别表示正、反例集合,则排序“损失”(loss)这样定义:

       即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。容易看出,l$_{rank}_$对应的是ROC曲线之上的面积:若一个正例在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序在其之前的反例所占的比例,即假正例率,因此有:

                                                                          AUC=1— l$_{rank}_$

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

      现实生活中,不同类型的错误造成的后果不同。将正例预测成假例与将假例预测成正例的代价常常是不一样的,例如:将无疾病患者误诊为有疾病,只是增加进一步检查的麻烦,但将有疾病患者误诊为无疾病,却是增加了患者的生命危险。为了权衡不同类型错误造成的不同损失,我们为错误赋予“非均等代价”(unequal cost)。

       以二分类任务为例,可根据任务的领域知识设定一个“代价矩阵”(cost matrix)。cost$_{ij}_$表示将第i类样本预测为第j类样本的代价。

还没写完,暂时保存一下。。。

猜你喜欢

转载自blog.csdn.net/wynlnlhhjy/article/details/81409514