• 参考:西瓜书第二章

  • ​之前的文章​​介绍了多种模型选择的概念,其关键是设计一个对比各个方法所得模型及其模型参数的规范流程,并利用它从假设空间中选出泛化能力最强的模型,形式化地讲是做以下两件事
  1. 确定模型类型​(决策树、线性回归、神经网络…)·
  2. 确定参数,包括​​模型参数​​​和​​(算法)超参数​​。这一步是模型选择的核心,而比较不同模型(即不同参数)的性能是这一步的核心,“比较” 方法进一步细化为三步
  1. 设计模型性能的 ​评估方法​,上篇文章已经详细介绍过了
  2. 设计性能的量化指标 ​性能度量​,本文进行介绍
  3. 设计合适的比较方法,通常用数理统计中的 ​假设检验

文章目录

  • ​​1 性能度量​​
  • ​​1.1 回归任务常用的性能度量​​
  • ​​1.2 分类任务常用的性能度量​​
  • ​​1.2.1 错误率和精度​​
  • ​​1.2.2 查准率、查全率和
  • ​​1.2.3 ROC 和 AUC​​
  • ​​1.2.4 代价敏感错误率与代价曲线​​
  • ​​2. 比较检验​​

1 性能度量

  • 模型评估的核心是评估泛化能力,相应的评价标准称为 性能度量performance measure​。不同的性能度量可能导致不同的评估结果(即模型的 “好坏” 是相对的),我们应基于任务需求设计性能度量

1.1 回归任务常用的性能度量

  • 给定样本集 机器学习基础(5)—— 模型选择之性能度量_ROC,回归任务的评估对象是学习器 机器学习基础(5)—— 模型选择之性能度量_查全率_02 的预测结果 机器学习基础(5)—— 模型选择之性能度量_查准率_03 和真实标记 机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_04
  • 均方误差mean squared error​​:对于离散和连续的数据分布,如下定义均方误差
    机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_05

1.2 分类任务常用的性能度量

  • 分类任务中的性能度量比较多样,下面逐一介绍

1.2.1 错误率和精度

  • 这是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务
  • 给定样本集 机器学习基础(5)—— 模型选择之性能度量_AUC_06,错误率和精度定义如下
  1. 分类错误率​​:对于离散和连续的数据分布,如下定义分类错误率
    机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_07
  2. 精度​​:对于离散和连续的数据分布,如下定义分类精度
    机器学习基础(5)—— 模型选择之性能度量_查全率_08

1.2.2 查准率、查全率和

  • 如果我们想进一步考察评估分类性能,只用错误率和精度就力不从心了。考虑最简单的二分类问题,利用错误率和精度可以评估出多少比例的样本被分类错误,但是无法考察 “判断为正例的样本中有多少比例真的是正例”、“所有正样本中有多少被分类正确” 这样的细化指标。对于二分类问题,考虑样本真实类别和预测类别的所有组合情况,可以得到如下的 ​​混淆矩阵confusion matrix​​ (其中 机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_09

    这样我们可以进一步提出针对二分类问题的两个指标:
  1. 查准率precision 机器学习基础(5)—— 模型选择之性能度量_AUC_10:预测为正例的样本中真正正样本的比例
  2. 查全率/召回率recall 机器学习基础(5)—— 模型选择之性能度量_查准率_11:真正正样本中预测为正例的比例
    机器学习基础(5)—— 模型选择之性能度量_ROC_12
  • 查准率和查全率是一对矛盾的度量,一个量较高时另一个就较低

以判断西瓜是不是好瓜为例

  1. 若想提高查全率(将好瓜尽可能多地选出来)可以增加选瓜的数量,极端情况下所有瓜全判断为好瓜,则所有好瓜都一定选出,机器学习基础(5)—— 模型选择之性能度量_AUC_13。但此时也误判了大量坏瓜,导致查准率 机器学习基础(5)—— 模型选择之性能度量_AUC_10
  2. 若想提高查准率若(希望选的瓜中好瓜比例尽可能高)可以只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低
  • 通常分类器会输出一个样本判断为正例的概率,可以把所有样本按判正的概率排序,调整概率阈值使得判正的样本数从 0 逐一增加到全体样本,每次计算查准率和查全率,这样就能绘制 ​查准率-查全率曲线(P-R曲线)
    考虑如何用查准和查全率这两个评估指标对比模型
  1. 如果一个学习器的 P-R 曲线被另一个完全包住,则可以断定后者性能更好,如上图中 B 一定优于 C
  2. 如果两个学习其的 P-R 曲线交叉,则可以通过比较 P-R 曲线下面积的大小来对比性能,但是这个值不太好估算,所以人们设计一些综合考虑查准和查全率的性能度量
  • 综合考虑查准和查全率的性能度量主要有以下三种
  1. 平衡点 Break-Event Point,BEP机器学习基础(5)—— 模型选择之性能度量_ROC_15 时的值,如上图中学习器 A 的 BEP 就是 0.8,这样也能比较模型性能,但是有些过于简化了
  2. F1度量:查准率和查全率的调和平均,定义为
    机器学习基础(5)—— 模型选择之性能度量_ROC_16 这个指标中 机器学习基础(5)—— 模型选择之性能度量_ROC_17机器学习基础(5)—— 模型选择之性能度量_查全率_18
  3. Fβ度量:查准率和查全率的调和平均,定义为
    机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_19 这是 机器学习基础(5)—— 模型选择之性能度量_AUC_20 度量的推广,这里的 机器学习基础(5)—— 模型选择之性能度量_ROC_21 度量了查全率 机器学习基础(5)—— 模型选择之性能度量_查准率_11 对查准率 机器学习基础(5)—— 模型选择之性能度量_AUC_10 的相对重要性,通过它可以调节对 机器学习基础(5)—— 模型选择之性能度量_AUC_10机器学习基础(5)—— 模型选择之性能度量_查准率_11
  • 例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要
  • 相比算数平均和几何平均,调和平均更重视较小值
  • 有时我们想综合考虑多个混淆矩阵来对比模型,比如
  1. 进行多次训练/测试
  2. 执行多个任务
  3. 多分类任务,每两两类组合得到一个混淆矩阵

这时有两种方式进行综合

  1. 先在对各个混淆矩阵计算对应的 机器学习基础(5)—— 模型选择之性能度量_ROC_17机器学习基础(5)—— 模型选择之性能度量_查全率_18,再计算出平均值 机器学习基础(5)—— 模型选择之性能度量_ROC_28,进而利用他们计算 机器学习基础(5)—— 模型选择之性能度量_查全率_29 度量,这样得到的称为 ​​​宏查准率macro-P​​​、​​宏查全率macro-R​​​、​​宏F1 macro-F1​
  2. 先把所有混淆矩阵的对应元素进行平均得到一个平均混淆矩阵,再按上面的方法计算三个度量,这样得到的称为 ​​微查准率micro-P​​​、​​微查全率micro-R​​​、​​微F1 micro-F1​

1.2.3 ROC 和 AUC

  • 上面介绍 P-R 曲线时已经提到了大多数分类器的分类原理,即首先对测试样本产生一个实值或概率值,用它和设定的分类阈值比较,大于就分为正类,反之分为负类。我们可以按分类器输出对测试样本排序,最可能是正例的排在最前,最不可能是正例的排在最后,并根据任务需求设置不同的分类阈值截断点
  1. 若更重视 “查准率”,则选择排序中靠前的位置进行截断
  2. 若更重视"查全率",则可选择靠后的位置进行截断

注意到,这个排序本身的质量好坏,体现了综合考虑不同任务下的 “期望泛化性能” 的好坏,即 “一般情况下” 泛化性能的好坏。ROC 和 AUC 就是从模型输出排序质量的角度来评估分类器泛化性能的度量标准

  • ROC受试者工作特征​:是一个类似 P-R 曲线的曲线,也是逐一调整分类阈值,每次计算两个值作为横纵坐标作图,分别为
  1. 横轴 假正例率FPR:真正负样本中预测为正例的比例
  2. 纵轴为 真正例率TPR:真正正样本中预测为正例的比例(同查全率)
    机器学习基础(5)—— 模型选择之性能度量_查全率_30

这样就能绘制出 ROC 曲线图如下

机器学习基础(5)—— 模型选择之性能度量_AUC_31


显然,图中的虚线对角线对应于 “随机猜测” 模型,而点 机器学习基础(5)—— 模型选择之性能度量_查准率_32 对应于将所有正例排在反例之前的 “理想模型”,对于任意给定的假正例率,对应的真正例率越高越好,从整体上看,就是曲线上凸越多越好。和 P-R 曲线类似,在利用 ROC 指标评估对比模型时

  1. 若一个学习器的曲线将另一个完全包住,则可断定前者性能更好
  2. 如果两个学习器的 ROC 曲线出现交叉,则围出面积更大的学习器好,这个面积指标就是 AUC(Area Under ROC Curve)
  • 使用有限样本集 机器学习基础(5)—— 模型选择之性能度量_AUC_33 评估时,ROC 曲线如上图 b 所示,可以将其分割成很多长方形估计面积(AUC) ,定义为
    机器学习基础(5)—— 模型选择之性能度量_查全率_34 形式化地看,AUC 考虑的是样本预测的排序质量,因此它与排序误差有紧密联系,给定 机器学习基础(5)—— 模型选择之性能度量_ROC_35 个正样本和 机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_36 个负样本,令 机器学习基础(5)—— 模型选择之性能度量_查全率_37 分别表示正负样本集合,则排序损失定义为
    机器学习基础(5)—— 模型选择之性能度量_查准率_38考虑每一对正负样本,若学习器对正样本的输出值小于负样本就进行 机器学习基础(5)—— 模型选择之性能度量_查全率_39 的罚分; 若学习器对正样本的输出值等于负样本就进行 机器学习基础(5)—— 模型选择之性能度量_查准率_40,容易看出 机器学习基础(5)—— 模型选择之性能度量_ROC_41 对应的是 ROC 曲线之上的面积,有
    机器学习基础(5)—— 模型选择之性能度量_查准率_42

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

  • 1.2.2 节介绍 ​​Fβ​​ 度量时,提到了对于不同的任务,对查全率和查准率之间需求的倾向可能不等;类似的,在某个特定任务中,各个类别分类出错导致的代价也可能不等

例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了"一次错误"但后者的影响是增加了进→步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机

  • 前面介绍的性能度量都只是从各类预测错误的次数/比例的角度去构造,隐式地假设了不同的错误代价均等。考虑到不同错误的代价,对于一个多分类任务,设 机器学习基础(5)—— 模型选择之性能度量_AUC_43 表示将第 机器学习基础(5)—— 模型选择之性能度量_AUC_44 类样本预测为 机器学习基础(5)—— 模型选择之性能度量_查准率_45 类的代价,这样就能构造出 ​​代价矩阵​。以最简单的二分类任务为例,代价矩阵为
  • 机器学习基础(5)—— 模型选择之性能度量_AUC_46

  • 注意到通常设置 机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_47,将上图的 0/1 类看作正/负类,机器学习基础(5)—— 模型选择之性能度量_查全率_37 分别表示正负样本集合,则可如下计算出 ​​代价敏感cost-sensitive 错误率​​
    机器学习基础(5)—— 模型选择之性能度量_ROC_49
  • 代价曲线 cost curve
  1. 横轴 正例概率代价 是把正样本误判为负的代价在代价度量中的重要性,取值 机器学习基础(5)—— 模型选择之性能度量_AUC_50,如下(其中 机器学习基础(5)—— 模型选择之性能度量_AUC_51 是样本为正的概率)
    机器学习基础(5)—— 模型选择之性能度量_ROC_52
  2. 纵轴 归一化代价 是各种错误判断情况的综合代价,取值 机器学习基础(5)—— 模型选择之性能度量_AUC_50,如下
    机器学习基础(5)—— 模型选择之性能度量_查全率_54 其中 机器学习基础(5)—— 模型选择之性能度量_AUC_55 是 1.2.3 节的假正例率(正样本误判为负概率);机器学习基础(5)—— 模型选择之性能度量_查准率_56

直观上看,给定一组 机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_57 参数,即给定一个学习器的分类性能,就对应 “归一化代价-正例概率代价“ 图中一条从 机器学习基础(5)—— 模型选择之性能度量_查全率_58机器学习基础(5)—— 模型选择之性能度量_查全率_59

  1. 横轴代表所有代价不等情况,即从 “只在意正样本误判(不在意负样本误判)”,到 “不在意正样本误判(只在意负样本误判)”
  2. 纵轴反映各种倾向情况下,某个 机器学习基础(5)—— 模型选择之性能度量_查全率_60

在评估模型进行比较时,我们要综合考虑所有可能的 机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_57。具体而言,把 ROC 曲线上的每一个点转化为对应的 机器学习基础(5)—— 模型选择之性能度量_ROC_62 参数,然后在 “归一化代价-正例概率代价“ 图中把所有参数对应的线段都画出来,然后取所有线段的下界,就得到了 ​​代价曲线,它围出的面积即为在所有条件下学习器的期望总体代价,如下所示

机器学习基础(5)—— 模型选择之性能度量_AUC_63

2. 比较检验

  • 利用前一篇文章介绍的实验评估方法,计算出第1节的各个性能度量结果,是不是之间 “比大小” 就能对学习器的性能进行比较了?事实上,机器学习中性能比较这件事比看起来复杂很多
  1. 我们希望比较的是泛化性能,而实验评估只能得到测试集上的性能,两者的对比结果未必相同
  2. 测试集上的性能与测试集本身的选择有很大关系,测试集的尺寸和包含的测试样例都会影响测试结果
  3. 很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会有不同
  • 这里很容易联想到数理统计中的​​假设检验​​​,比如用简单的错误率 机器学习基础(5)—— 模型选择之性能度量_代价敏感曲线_64 作为性能度量,我们可以先对学习器的泛化错误率做出假设 机器学习基础(5)—— 模型选择之性能度量_ROC_65,然后再用假设检验方法计算该假设的置信度、拒绝域等统计信息。基于假设检验结果我们可推断出,若在测试集上观察到学习器 A 比 B 好,则 A 的泛化性能是否在统计意义上优于 B,以及这个结论的把握有多大
  • 对于假设检验的说明请参考 ​​数理统计 —— 参数估计与假设检验​​,西瓜书上这里介绍了​​交叉验证 t 检验​​​、​​McNemar 检验​​​、​​Friedman检验​​​ 与 ​​Nemenyi后续检验​​ 等方法,还是比较复杂,待续