如何在Python中绘制多条ROC曲线(附实例)

1,903 阅读2分钟

在机器学习中,可视化分类模型性能的一种方法是创建ROC曲线,它代表了 "接收者操作特征 "曲线。

通常情况下,你可能想对一个数据集拟合几个分类模型,并为每个模型创建一条ROC曲线,以便直观地看到哪个模型在数据上表现得最好。

下面的例子说明了如何在Python中绘制多条ROC曲线。

第一步:导入必要的软件包

首先,我们要在Python中导入几个必要的包:

from sklearn import metrics
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier
import numpy as np
import matplotlib.pyplot as plt

第二步:创建假数据

接下来,我们将使用sklearn的make_classification()函数来创建一个有1000行、四个预测变量和一个二进制响应变量的假数据集。

#create fake dataset
X, y = datasets.make_classification(n_samples=1000,
                                    n_features=4,
                                    n_informative=3,
                                    n_redundant=1,
                                    random_state=0)

#split dataset into training and testing set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3,random_state=0)

第三步:拟合多个模型并绘制ROC曲线

接下来,我们将对数据拟合一个逻辑回归模型,然后再拟合一个梯度提升模型,并在同一张图上绘制每个模型的ROC曲线:

#set up plotting area
plt.figure(0).clf()

#fit logistic regression model and plot ROC curve
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred)
auc = round(metrics.roc_auc_score(y_test, y_pred), 4)
plt.plot(fpr,tpr,label="Logistic Regression, AUC="+str(auc))

#fit gradient boosted model and plot ROC curve
model = GradientBoostingClassifier()
model.fit(X_train, y_train)
y_pred = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred)
auc = round(metrics.roc_auc_score(y_test, y_pred), 4)
plt.plot(fpr,tpr,label="Gradient Boosting, AUC="+str(auc))

#add legend
plt.legend()

plot multiple ROC curves in Python

蓝线表示逻辑回归模型的ROC曲线,橙线表示梯度提升模型的ROC曲线。

ROC曲线越是在图的左上角,该模型在将数据分类方面做得越好。

为了量化这一点,我们可以计算AUC--曲线下的面积--它告诉我们曲线下的面积是多少。

AUC越接近于1,模型就越好。

从我们的图中,我们可以看到每个模型的AUC指标如下:

  • 逻辑回归模型的AUC:0.7902
  • 梯度提升模型的AUC:0.9712

很明显,与逻辑回归模型相比,梯度提升模型在将数据分类方面做得更好。

其他资源

以下教程提供了关于分类模型和ROC曲线的额外信息:

Logistic回归简介
如何解释ROC曲线(有例子)
什么是好的AUC分数?