如何在 python 中绘制多条 roc 曲线(附示例)
可视化机器学习中分类模型性能的一种方法是创建ROC 曲线,它代表“接收器操作特征”曲线。
通常,您可能希望将多个分类模型拟合到单个数据集,并为每个模型创建 ROC 曲线,以可视化哪个模型在数据上表现最佳。
以下分步示例展示了如何在 Python 中绘制多条 ROC 曲线。
第1步:导入必要的包
首先,我们将几个必要的包导入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. set import GradientBoostingClassifier
import numpy as np
import matplotlib. pyplot as plt
第 2 步:创建假数据
接下来,我们将使用 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 )
第 3 步:拟合多个模型并绘制 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 曲线的其他信息: