ROC曲线和AUC

ROC曲线(Receptive Operating Characteristic,接受者工作曲线)和AUC(area under the curve,特指ROC曲线下的面积)通常用于评价一个二分类的优劣。AUC指标可以有两种解释

  1. 传统的曲线下面积
  2. A U C = P ( P 正 > P 负 ) AUC = P(P_{正} > P_{负}) AUC=P(P>P)。例如0.7的AUC可以表示,在70%的情况下,模型对正样本的打分高于负样本。

ROC曲线和AUC_第1张图片
ROC曲线的纵坐标是真阳率(TPR),横坐标是假阳率(FPR)

下面解释图中四个点和一个曲线

  1. A点:这是一个完美的分类器
  2. B点:最糟糕的分类器
  3. C点:分类器全部输出正样本
  4. D点:分类器全部输出负样本

可以看出,曲线越接近左上角,该分类器的性能越好。

如何绘制ROC曲线

  • ROC:通过调整模型预测的阈值可以得到不同的点,将这些点连成的一条曲线。

显然,对于一个特定的分类器和特定的数据集,其真阳率和假阳率都是一个定值。那么就需要人为的改动模型认为是正类的概率阈值,从而得到多组(TPR, FPR)。

实际操作就是,先按每个测试样本的概率值排序,然后从高到低的将概率值作为阈值。当测试样本的正样本概率大于等于阈值时输出为正,否则为负。这样有多少组样本就能得到多少个ROC上的点。

代码实现

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt

y_score = rdf.fit(train_x, train_y).predict_proba(test_x)
fpr, tpr, thre = roc_curve(test_y, y_score[:, 1])
roc_auc = auc(fpr, tpr)

def drawRoc(roc_auc,fpr,tpr):
    plt.subplots(figsize=(7, 5.5))
    plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
    plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('ROC Curve')
    plt.legend(loc="lower right")
    plt.show()

drawRoc(roc_auc, fpr, tpr)

ROC曲线和AUC_第2张图片

你可能感兴趣的:(python,机器学习)