二分类及AUC的理解
在机器学习中,二分类 (binary classification) 问题是最常出现且最经典的问题。本文首先解释二分类的样本标签问题,包括正例 (Positive)/反例 (Negative) 和真例 (True)/假例 (False) 这两组集合;紧接着介绍几种常用的分类器评估指标,例如精确度 (precision)、准确率 (accuracy)、敏感性 (sensitivity)、特异性 (specificity)等;最后,讨论对ROC曲线及其衍生的AUC指标的理解,并给出样例。
二分类标签
应用于二分类的样本通常用正例 (Positive, P) 和反例 (Negative, N) 进行标注,作为实际标签。而经过分类器估计后的输出,根据其结果的正确与否,划分为真例 (True, T) 和假 (False, F)两个集合。因此,需要注意的是T
和F
两个集合均包含正例和反例样本。
根据实际标签和预测结果进行两两组合,得到四个子集,分别为真正率 (True positive, TP)、真反例 (True negative, TN)、假正率 (False positive, FP) 和假反例 (False negative, FN),如下表所示。
预测正例 | 预测反例 | |
---|---|---|
实际正例 | TP | FN |
实际反例 | FP | TN |
通过对这四个子集样本的组合,可以得到一些评估指标,用于评价分类器的表现。这里我想强调一下对FN和FP的理解,其中FN指的是实际为反例,但被分类器判断为正例,而FP指的是实际为正例,但被分类器判断为反例,二者的合集为F
。
评估指标
下面讨论常用的二分类器的评估指标 (index or measure)。定义为所有的样本数量,和对应实际标注为正例和反例的样本数;和表示分类器估计的标签中正确和错误的样本数。相应的,定义、、和为TP、TN、FP、FN样本的数目。因此,定义如下的评估指标
准确率 (accuracy)
准确率为分类器预测结果中判断正确的样本占所有样本的比例,即.精确度 (precision)
精确度又称为查准率,衡量分类器预测为正的样本中实际为正例的样本比例,即 .敏感性 (sensitivity)
敏感性又称为召回率或真正率,衡量实际为正例的样本经过分类器预测后标记正确的样本所占比例,即.F1-score
F1-score是对精确度和敏感性的结合,因为这两者本质上是矛盾的,通常敏感性越高则精确度会较低。F1-score的表达式为, .特异性 (specificity)
特异性是实际标注为反例的样本经过分类器预测正确的样本的比例,即.假正率 (fasle positive rate)
假正率表示分类器预测为反例的样本中实际为反例的样本的比例,即.
对于这些评估指标,我的理解见下表,
评估指标 | 意义 |
---|---|
准确率 | 衡量了分类器总体上的准确性,不考虑样本的实际类别. |
精确度 | 衡量了正例的分类准确性,通常比准确率要高. |
敏感性 | 衡量了分类器对正例的泛化能力,在异常检测中应用较多. |
特异性 | 衡量了分类器对反例的分类准确性. |
假正率 | 与敏感性类似,衡量分类器对反例的泛化能力. |
ROC和AUC
以上的评估指标均要求分类器的输出为确定的标签,而分类器通常输出的是样本被判断为正例的概率,为了得到标签,需要设定概率的门限,即大于该门限的概率对应的样本判断为正例,否则为反例。门限的设定,影响分类器的泛化能力。
因此,人们提出了receiver operating characteristic (ROC) 的概念,最早出现二战时检测敌机的雷达分析技术。在信号处理中,有这样一组指标,即捕获率 (catch rate) 和追踪率 (follow rate),前者衡量了系统对于目标信号的捕获能力,后者衡量系统在捕获信号后继续追踪的能力。这两个指标,对应到二分类问题中就是敏感性或真正率 (truu positive rate, TPR)和假正率。
通过TPR和FRP即可求解ROC曲线。对分类器输出的样本概率进行排序,设定概率门限thrs
,将高于该门限的样本判断为正例,反之判断为反例。而后,与实际的样本标签进行比较,计算对应该门限的TPR和FPR。记录不同门限处的TPR和FRP,则得到了该分类器的ROC曲线。
如下为ROC曲线的求解算法,
针对不同的分类器,若某个分类器的ROC曲线整体在其他分类器的上方,则可认为该分类器最优。但往往存在ROC曲线交叉的情形,此时通过计算ROC曲线下方的面积,即AUC (area under curve)值来进行对比,AUC数值越大,分类器的分类效果越好,泛化能力越强。
给出一个ROC曲线和AUC的求解样例,具体的代码实现见这里.
首先,设样本的标签和二分类器输出的概率为,
设定thrs的步长为0.1,则求解的TPR和FPR分别为,
最后,求解得到auc=0.967. 下图为该样例的ROC曲线,

scikit-learn也提供了求解auc的函数,其用法如下,
在我的notebook中,分别给出了我的实现和sklearn.metrics.auc的实现,二者结果相同。最后吐个槽,因为haroopad的bug,这篇是我重新写的!!!
References
[1] 周志华,机器学习,2017 清华大学出版社
[2] 机器学习和统计里面的auc怎么理解?
[3] sklearn.metrics.auc