- 参考:西瓜书第二章
- 之前的文章介绍了多种模型选择的概念,其关键是设计一个对比各个方法所得模型及其模型参数的规范流程,并利用它从假设空间中选出泛化能力最强的模型,形式化地讲是做以下两件事
- 确定
模型类型
(决策树、线性回归、神经网络…)· - 确定参数,包括
模型参数
和(算法)超参数
。这一步是模型选择的核心,而比较不同模型(即不同参数)的性能是这一步的核心,“比较” 方法进一步细化为三步
- 设计模型性能的
评估方法
,上篇文章已经详细介绍过了 - 设计性能的量化指标
性能度量
,本文进行介绍 - 设计合适的比较方法,通常用数理统计中的
假设检验
文章目录
- 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 回归任务常用的性能度量
- 给定样本集 ,回归任务的评估对象是学习器 的预测结果 和真实标记
-
均方误差mean squared error
:对于离散和连续的数据分布,如下定义均方误差
1.2 分类任务常用的性能度量
- 分类任务中的性能度量比较多样,下面逐一介绍
1.2.1 错误率和精度
- 这是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务
- 给定样本集 ,错误率和精度定义如下
-
分类错误率
:对于离散和连续的数据分布,如下定义分类错误率 -
精度
:对于离散和连续的数据分布,如下定义分类精度
1.2.2 查准率、查全率和
- 如果我们想进一步考察评估分类性能,只用错误率和精度就力不从心了。考虑最简单的二分类问题,利用错误率和精度可以评估出多少比例的样本被分类错误,但是无法考察 “判断为正例的样本中有多少比例真的是正例”、“所有正样本中有多少被分类正确” 这样的细化指标。对于二分类问题,考虑样本真实类别和预测类别的所有组合情况,可以得到如下的
混淆矩阵confusion matrix
(其中 )
这样我们可以进一步提出针对二分类问题的两个指标:
-
查准率precision
:预测为正例的样本中真正正样本的比例 -
查全率/召回率recall
:真正正样本中预测为正例的比例
- 查准率和查全率是一对矛盾的度量,一个量较高时另一个就较低
以判断西瓜是不是好瓜为例
- 若想提高查全率(将好瓜尽可能多地选出来)可以增加选瓜的数量,极端情况下所有瓜全判断为好瓜,则所有好瓜都一定选出,。但此时也误判了大量坏瓜,导致查准率
- 若想提高查准率若(希望选的瓜中好瓜比例尽可能高)可以只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低
- 通常分类器会输出一个样本判断为正例的概率,可以把所有样本按判正的概率排序,调整概率阈值使得判正的样本数从 0 逐一增加到全体样本,每次计算查准率和查全率,这样就能绘制
查准率-查全率曲线(P-R曲线)
考虑如何用查准和查全率这两个评估指标对比模型
- 如果一个学习器的 P-R 曲线被另一个完全包住,则可以断定后者性能更好,如上图中 B 一定优于 C
- 如果两个学习其的 P-R 曲线交叉,则可以通过比较 P-R 曲线下面积的大小来对比性能,但是这个值不太好估算,所以人们设计一些综合考虑查准和查全率的性能度量
- 综合考虑查准和查全率的性能度量主要有以下三种
-
平衡点 Break-Event Point,BEP
: 时的值,如上图中学习器 A 的 BEP 就是 0.8,这样也能比较模型性能,但是有些过于简化了 -
F1度量
:查准率和查全率的调和平均,定义为
这个指标中 和 -
Fβ度量
:查准率和查全率的调和平均,定义为
这是 度量的推广,这里的 度量了查全率 对查准率 的相对重要性,通过它可以调节对 和
- 例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要
- 相比算数平均和几何平均,调和平均更重视较小值
- 有时我们想综合考虑多个混淆矩阵来对比模型,比如
- 进行多次训练/测试
- 执行多个任务
- 多分类任务,每两两类组合得到一个混淆矩阵
这时有两种方式进行综合
- 先在对各个混淆矩阵计算对应的 和 ,再计算出平均值 ,进而利用他们计算 度量,这样得到的称为
宏查准率macro-P
、宏查全率macro-R
、宏F1 macro-F1
- 先把所有混淆矩阵的对应元素进行平均得到一个平均混淆矩阵,再按上面的方法计算三个度量,这样得到的称为
微查准率micro-P
、微查全率micro-R
、微F1 micro-F1
1.2.3 ROC 和 AUC
- 上面介绍 P-R 曲线时已经提到了大多数分类器的分类原理,即首先对测试样本产生一个实值或概率值,用它和设定的分类阈值比较,大于就分为正类,反之分为负类。我们可以按分类器输出对测试样本排序,最可能是正例的排在最前,最不可能是正例的排在最后,并根据任务需求设置不同的分类阈值截断点
- 若更重视 “查准率”,则选择排序中靠前的位置进行截断
- 若更重视"查全率",则可选择靠后的位置进行截断
注意到,这个排序本身的质量好坏,体现了综合考虑不同任务下的 “期望泛化性能” 的好坏,即 “一般情况下” 泛化性能的好坏。ROC 和 AUC 就是从模型输出排序质量的角度
来评估分类器泛化性能的度量标准
-
ROC受试者工作特征
:是一个类似 P-R 曲线的曲线,也是逐一调整分类阈值,每次计算两个值作为横纵坐标作图,分别为
- 横轴
假正例率FPR
:真正负样本中预测为正例的比例 - 纵轴为
真正例率TPR
:真正正样本中预测为正例的比例(同查全率)
这样就能绘制出 ROC 曲线图如下
显然,图中的虚线对角线对应于 “随机猜测” 模型,而点 对应于将所有正例排在反例之前的 “理想模型”,对于任意给定的假正例率,对应的真正例率越高越好,从整体上看,就是曲线上凸越多越好。和 P-R 曲线类似,在利用 ROC 指标评估对比模型时
- 若一个学习器的曲线将另一个完全包住,则可断定前者性能更好
- 如果两个学习器的 ROC 曲线出现交叉,则围出面积更大的学习器好,这个面积指标就是
AUC(Area Under ROC Curve)
- 使用有限样本集 评估时,ROC 曲线如上图 b 所示,可以将其分割成很多长方形估计面积(AUC) ,定义为
形式化地看,AUC 考虑的是样本预测的排序质量,因此它与排序误差有紧密联系,给定 个正样本和 个负样本,令 分别表示正负样本集合,则排序损失定义为
即考虑每一对正负样本,若学习器对正样本的输出值小于负样本就进行 的罚分; 若学习器对正样本的输出值等于负样本就进行 ,容易看出 对应的是 ROC 曲线之上的面积,有
1.2.4 代价敏感错误率与代价曲线
- 1.2.2 节介绍
Fβ
度量时,提到了对于不同的任务,对查全率和查准率之间需求的倾向可能不等;类似的,在某个特定任务中,各个类别分类出错导致的代价也可能不等
例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了"一次错误"但后者的影响是增加了进→步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机
- 前面介绍的性能度量都只是从各类预测错误的次数/比例的角度去构造,隐式地假设了不同的错误代价均等。考虑到不同错误的代价,对于一个多分类任务,设 表示将第 类样本预测为 类的代价,这样就能构造出
代价矩阵
。以最简单的二分类任务为例,代价矩阵为 - 注意到通常设置 ,将上图的 0/1 类看作正/负类, 分别表示正负样本集合,则可如下计算出
代价敏感cost-sensitive 错误率
-
代价曲线 cost curve
- 横轴
正例概率代价
是把正样本误判为负的代价在代价度量中的重要性,取值 ,如下(其中 是样本为正的概率) - 纵轴
归一化代价
是各种错误判断情况的综合代价,取值 ,如下
其中 是 1.2.3 节的假正例率(正样本误判为负概率);
直观上看,给定一组 参数,即给定一个学习器的分类性能,就对应 “归一化代价-正例概率代价“ 图中一条从 到
- 横轴代表所有代价不等情况,即从 “只在意正样本误判(不在意负样本误判)”,到 “不在意正样本误判(只在意负样本误判)”
- 纵轴反映各种倾向情况下,某个
在评估模型进行比较时,我们要综合考虑所有可能的 。具体而言,把 ROC 曲线上的每一个点转化为对应的 参数,然后在 “归一化代价-正例概率代价“ 图中把所有参数对应的线段都画出来,然后取所有线段的下界,就得到了 代价曲线
,它围出的面积即为在所有条件下学习器的期望总体代价,如下所示
2. 比较检验
- 利用前一篇文章介绍的实验评估方法,计算出第1节的各个性能度量结果,是不是之间 “比大小” 就能对学习器的性能进行比较了?事实上,机器学习中性能比较这件事比看起来复杂很多
- 我们希望比较的是泛化性能,而实验评估只能得到测试集上的性能,两者的对比结果未必相同
- 测试集上的性能与测试集本身的选择有很大关系,测试集的尺寸和包含的测试样例都会影响测试结果
- 很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会有不同
- 这里很容易联想到数理统计中的
假设检验
,比如用简单的错误率 作为性能度量,我们可以先对学习器的泛化错误率做出假设 ,然后再用假设检验方法计算该假设的置信度、拒绝域等统计信息。基于假设检验结果我们可推断出,若在测试集上观察到学习器 A 比 B 好,则 A 的泛化性能是否在统计意义上优于 B,以及这个结论的把握有多大 - 对于假设检验的说明请参考 数理统计 —— 参数估计与假设检验,西瓜书上这里介绍了
交叉验证 t 检验
、McNemar 检验
、Friedman检验
与 Nemenyi后续检验
等方法,还是比较复杂,待续