使用Python绘制AUC曲线(即ROC曲线)
以下是使用Python绘制AUC曲线(即ROC曲线)的完整步骤及代码示例,综合多个权威教程整理:
一、核心步骤
-
数据准备
• 数据集需包含真实标签(二分类:0/1)和模型输出的预测概率值(连续值)。可使用pandas
读取数据并检查缺失值。
• 示例数据集:乳腺癌分类数据(sklearn.datasets.load_breast_cancer
)。 -
模型训练与预测概率计算
• 常用模型如逻辑回归、随机森林等,通过predict_proba()
方法获取预测概率值。from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split# 加载数据集 data = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2)# 训练模型并获取预测概率 model = RandomForestClassifier() model.fit(X_train, y_train) y_pred_prob = model.predict_proba(X_test)[:, 1] # 正类概率
-
计算AUC值与ROC曲线参数
• 使用sklearn.metrics
中的roc_auc_score
和roc_curve
函数:from sklearn.metrics import roc_auc_score, roc_curve# 计算AUC auc_score = roc_auc_score(y_test, y_pred_prob) print(f"AUC值:{auc_score:.2f}") # 示例输出:0.92# 获取FPR和TPR fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
-
绘制ROC曲线
• 使用matplotlib
可视化结果,并添加对角线作为参考线:import matplotlib.pyplot as pltplt.figure(figsize=(8, 6)) plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC曲线 (AUC = {auc_score:.2f})') plt.plot([0, 1], [0, 1], 'k--', lw=2) # 随机猜测参考线 plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('假阳性率 (FPR)') plt.ylabel('真阳性率 (TPR)') plt.title('ROC曲线') plt.legend(loc="lower right") plt.show()
效果示例:
![ROC曲线示意图,AUC值标注在右下角]
二、关键解释
-
AUC值解读
• 0.5-0.7:模型区分能力较弱;0.7-0.9:中等至良好;>0.9:非常优秀。
• 若AUC接近0.5,说明模型与随机猜测无异。 -
ROC曲线优化
• 多模型比较:在同一图中绘制多条曲线,对比不同模型性能。
• 阈值选择:根据业务需求调整阈值(如医疗诊断需高TPR,风控需低FPR)。
三、完整代码整合
# 导入库
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt# 数据加载与预处理
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)# 模型训练与预测
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
y_pred_prob = model.predict_proba(X_test)[:, 1]# 计算AUC与ROC参数
auc = roc_auc_score(y_test, y_pred_prob)
fpr, tpr, _ = roc_curve(y_test, y_pred_prob)# 绘图
plt.figure()
plt.plot(fpr, tpr, label=f'ROC曲线 (AUC = {auc:.2f})')
plt.plot([0, 1], [0, 1], 'k--', label='随机猜测')
plt.xlabel('假阳性率 (FPR)')
plt.ylabel('真阳性率 (TPR)')
plt.title('乳腺癌分类模型ROC曲线')
plt.legend()
plt.show()
四、常见问题
-
数据格式错误
• 确保y_pred_prob
是概率值而非类别标签,使用predict_proba()
而非predict()
。 -
多分类问题
• ROC曲线适用于二分类,多分类需使用One-vs-Rest策略生成多条曲线。
通过上述步骤,可快速实现AUC曲线的绘制与模型性能评估。如需进一步优化图形风格(如颜色、标注),可参考matplotlib
高级设置。