在机器学习中,可视化分类模型性能的一种方法是创建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()

蓝线表示逻辑回归模型的ROC曲线,橙线表示梯度提升模型的ROC曲线。
ROC曲线越是在图的左上角,该模型在将数据分类方面做得越好。
为了量化这一点,我们可以计算AUC--曲线下的面积--它告诉我们曲线下的面积是多少。
AUC越接近于1,模型就越好。
从我们的图中,我们可以看到每个模型的AUC指标如下:
- 逻辑回归模型的AUC:0.7902
- 梯度提升模型的AUC:0.9712
很明显,与逻辑回归模型相比,梯度提升模型在将数据分类方面做得更好。
其他资源
以下教程提供了关于分类模型和ROC曲线的额外信息: