接收者操作特征曲线

                     

贡献者: xzllxls

预备知识 分类,模型评估,混淆矩阵

   接收者操作特征曲线(Receiver operating characteristic curve, ROC)是一种用于评价二分类器的分类性能的图表。该方法来源于信号检测论,是在第二次世界大战中,由电子信号工程师发明的。在心理学领域中也有广泛应用。

   接收者操作特征曲线能够评估分类模型在不同阈值下的性能,通过绘制真阳性率(True positive rate, TPR)与假阳性率(False positive rate, FPR)的关系来衡量模型的区分能力。

定义 1 真阳性率

   真正阳性率(TPR):也称为灵敏度(Sensitivity)或召回率(Recall),表示在实际为正类的样本(阳性样本)中,被分类模型正确判断为正类(阳性)的比例。数学表达式为:

\begin{equation} TPR=\frac{TP}{P}=\frac{TP}{TP+FN}~, \end{equation}
其中,$P$ 表示实际为阳性的样本数,$TP$ 表示真阳的样本数,$FN$ 表示假阴性的样本数。

定义 2 假阳性率

   假正率(FPR):表示在所有负类样本(阴性样本)中,被分类模型错误判断为正类(阳性)的样本比例。数学表达式为:

\begin{equation} FPR=\frac{FP}{N}=\frac{FP}{TN+FP}~, \end{equation}
其中,$N$ 表示实际为阴性的样本数,$FP$ 表示假阳性的样本数,$TN$ 表示真阴性的样本数,$FP$ 表示假阳性的样本数。

   曲线中点的坐标是真阳率和假阳率。随着分类器阈值的变化,真阳率和假阳率分别随之改变,由此产生一系列的点,然后将相邻两点连接起来,即构成接收者操作特征曲线。

图
图 1:ROC 示意图

   图 1 中蓝色曲线即为 ROC 曲线。横坐标为假阳率,纵坐标为真阳率。红色对角线表示一个完全随机分类器的 ROC 曲线。如果一个分类器的 ROC 曲线大体在红色虚线的上方,则表示性能优于随机分类器。

   ROC 曲线分析可以帮助我们做模型选择,选择最优模型,抛弃次优模型。曲线下面积(Aera under curve, AUC)是 ROC 曲线最基本的评估指标,能表示分类器预测能力的一项常用的统计值。顾名思义,表示的是曲线下方,横轴上方的面积。通常把整图的面积定义为 1,则 AUC 的值在 $0$ 和 $1$ 之间。该面积值越大,则表示分类模型效果越好;反之,则越差。因此,定性地讲,ROC 曲线越靠近左上方,ROC 曲线下的面积越大,代表模型的效益越高。

1. 编程实战

   以下给出一个用 Python 语言产生接受者操作特征曲线,并计算曲线下面积的示例程序。该程序用 scikit-learn 机器学习库来求接受者操作特征曲线和曲线下面积。然后利用 matplotlib 库来绘制图形。采用 numpy 库来表示数据。

代码示例

from sklearn.metrics import roc_curve
from sklearn.metrics._ranking import auc

import matplotlib.pyplot as plt
import numpy as np


# 每个样本的实际的标签值
y = np.array([0, 1, 0, 1, 0, 0, 1, 1]) 

# 分类模型输出的分数值
scores = np.array([-0.20, -1.54, -1.38, -1.63, -1.70, -2.41, -1.14, -0.79])

# 计算真阳性率和假阳性率
fpr, tpr, thresholds = roc_curve(y, scores, pos_label=1)

# 计算曲线下面积
roc_auc = auc(fpr, tpr)

# 绘制接受者操作特征曲线
plt.title('ROC')
plt.plot(fpr, tpr, 'b', label="AUC=" + str(roc_auc))
plt.legend(loc='lower right')
plt.plot([0, 1], [0, 1], 'r--')
plt.ylabel('TPR')
plt.xlabel('FPR')
plt.show()

结果与说明

   执行上述程序,产生的图如下:

图
图 2:ROC 曲线图和 AUC 值

   图 2 中的横坐标表示假阳性率,纵坐标表示真阳性率。蓝色曲线即是 ROC 曲线,红色虚线为对角线。右下方显示的是 AUC 曲线下面积,值为 0.625,表示该分类模型的预测能力优于随机猜测。


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利