当前位置: 首页 > news >正文

使用Python绘制AUC曲线(即ROC曲线)

以下是使用Python绘制AUC曲线(即ROC曲线)的完整步骤及代码示例,综合多个权威教程整理:


一、核心步骤

  1. 数据准备
    • 数据集需包含真实标签(二分类:0/1)和模型输出的预测概率值(连续值)。可使用pandas读取数据并检查缺失值。
    • 示例数据集:乳腺癌分类数据(sklearn.datasets.load_breast_cancer)。

  2. 模型训练与预测概率计算
    • 常用模型如逻辑回归、随机森林等,通过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]  # 正类概率
    
  3. 计算AUC值与ROC曲线参数
    • 使用sklearn.metrics中的roc_auc_scoreroc_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)
    
  4. 绘制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值标注在右下角]


二、关键解释

  1. AUC值解读
    0.5-0.7:模型区分能力较弱;0.7-0.9:中等至良好;>0.9:非常优秀。
    • 若AUC接近0.5,说明模型与随机猜测无异。

  2. 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()

四、常见问题

  1. 数据格式错误
    • 确保y_pred_prob是概率值而非类别标签,使用predict_proba()而非predict()

  2. 多分类问题
    • ROC曲线适用于二分类,多分类需使用One-vs-Rest策略生成多条曲线。


通过上述步骤,可快速实现AUC曲线的绘制与模型性能评估。如需进一步优化图形风格(如颜色、标注),可参考matplotlib高级设置。

相关文章:

  • 极狐GitLab 用户 API 速率限制如何设置?
  • 【java 13天进阶Day12】XML和Dom4j,装饰模式,工厂模式,commons-io工具包,Base64
  • 机器学习05-CNN
  • C# 高级编程:Lambda 表达式
  • PHP腾讯云人脸核身获取Access Token
  • 《软件设计师》复习笔记(11.6)——系统转换、系统维护、系统评价
  • ASP.NET MVC 实现增删改查(CRUD)操作的完整示例
  • 给予FLUX更好的控制:FLUX.1-dev-ControlNet-Union-Pro-2.0
  • 精准计量+AI管控——安科瑞助力高校水电管理数字化转型
  • 2025妈妈杯数学建模D题完整分析论文
  • 2 celery环境搭建
  • ASP.NET常见安全漏洞及修复方式
  • 【Drools+springboot3规则匹配】
  • 利用 DeepSeek-R1 模型和计算机视觉微调模型实现马铃薯叶片疾病识别和分类
  • STM32使用rand()生成随机数并显示波形
  • 如何在PDF.js中改造viewer.html以实现PDF的动态加载
  • 优化WAV音频文件
  • hooker frida版just_trust_me.js 2025升级 支持boringssl unpinning
  • Skipped breakpoint at ... because of stepping in another thread问题分析
  • AI Agents系列之构建多智能体系统
  • 老旧高层遭“连环漏水”,如何携手共治解难题?
  • 徐州沛县一村委会因无资质处理固废,被环保部门罚款19万元
  • 全国首个医工交叉“MD+PhD”双博士培养项目在沪启动
  • 言短意长|大学本科招生,提前抢跑
  • 伊朗外交部:美矛盾立场被视为缺乏谈判的严肃性和诚意
  • 4月沪市公司新增回购70家,金额上限已超222亿元