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

【基础复习1】ROC 与 AUC:逻辑回归二分类例子

ROC 曲线与AUC值

引入

用在什么场景?
主要在二分类模型中用来划分阈值,用于效果评估与比较

ROC曲线横轴(真正):召回率:TPR = TP / (TP + FN)  所有真实类别为1的样本中,预测类别为1的⽐例  
ROC曲线纵轴(加正):FPR = FP / (FP + TN)  所有真实类别为0的样本中,预测类别为1的⽐例  
TPR 就是召回率  
FPR 有些地方也叫做假正例率/需警率
当横轴纵轴⼆者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5

为什么需要这两个值?
很多时候召回率是收益,而FPR为成本

ROC 曲线

ROC 曲线是真正率和假正率在不同的阈值下之间的图形表示关系。通常用作权衡模型的敏感度与模型对一个错误分类报警的概率。 

ROC计算api

from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
# 1. 计算ROC曲线的关键参数
sklearn.metrics.roc_curve(y_true, y_score, pos_label=1)
y_true:必选,样本的真实类别标签,需为 0(负例)和 1(正例)的二元标记。
y_score:必选,模型对每个样本的预测得分,可为正类的估计概率、置信值或分类器输出的原始分数。
pos_label:可选,指定 “正例” 对应的标签,默认值为 1,需与`y_true`中的正例标签一致。

AUC 值

AUC(areaunderthecurve)是 ROC 曲线下的面积,表示预测的正例排在负例前面的概率。 
直接使用ROC曲线下的面积,面积越大,就代表ROC曲线越拱,即AUC是评估ROC曲线拱度的指标。

AUC的计算api

from sklearn.metrics import roc_auc_scoresklearn.metrics.roc_auc_score(y_true, y_score)计算ROC曲线⾯积,即AUC值y_true:每个样本的真实类别,必须为0(反例),1(正例)标记y_score:预测得分,可以是正类的估计概率、置信值或者分类器⽅法的返回值

代码实践练习

数据生成

X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

n_samples=1000:生成 1000 个样本(即 1000 条数据)。

n_features=20:每个样本包含 20 个特征(即 20 个输入变量)。

n_classes=2:生成的是 二分类任务(标签只有 2 种,通常是 0 和 1)。

random_state=42:随机种子固定为 42,确保每次运行代码生成的数据集完全相同(便于结果复现)。

关键部分(生成曲线)

# 计算ROC曲线和AUC
fpr, tpr, thresholds = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)

fpr:不同阈值下,负例被误判为正例的比例(横轴)。

tpr:不同阈值下,正例被正确识别的比例(纵轴)。 

thresholds:划分正/负例的临界值,每个值对应一组 fpr 和 tpr。

代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc# 生成一些示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)# 获取测试集上的预测概率
y_probs = model.predict_proba(X_test)[:, 1]# 计算ROC曲线和AUC
fpr, tpr, thresholds = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)# 生成折线图
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC曲线 (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假正例率')
plt.ylabel('真正例率')
plt.title('ROC曲线')
plt.grid(True)  # 添加网格线
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

结果

运行 python ROC.py

http://www.dtcms.com/a/524040.html

相关文章:

  • 【Angular 】Angular 中的依赖注入
  • 做门户网站需要什么条件文化传播公司网站模版
  • 马斯克公司推出视频模型 Imagine v0.9,实测解析
  • 扶风做企业网站网站建设平台安全问题有哪些方面
  • 【AI4S】Motif-Driven Contrastive Learning of Graph Representations
  • Flutter路由使用指南
  • husky vs lefthook:新一代 Git Hooks 工具全面对比
  • Go Web 编程快速入门 07 - 模板(1):语法与最佳实践
  • 聊城网站建设信息兴义网站建设网站建设
  • 今年前三季度浙江进出口总值首破四万亿元
  • 【一文了解】八大排序-插入排序、希尔排序
  • n8n数据存储在postgres
  • 数据结构——冒泡排序
  • 医疗连续体机器人模块化控制界面设计(2025年更新版Python库)
  • 做网站服务器需要系统wordpress折腾怕了
  • 022数据结构之树状数组——算法备赛
  • 从 TypeScript 到 Java(4):访问修饰符与作用域 —— Java 的封装哲学
  • 做网站要有什么团队上海网站营销推广
  • 残差网络的介绍及ResNet-18的搭建(pytorch版)
  • WPF绘制界面常用功能
  • vbs笔记 【未完更】
  • 不用服务器也能搭博客!Docsify+cpolar的极简方案
  • 一文了解开源大语言模型文件结构,以 Hugging Face DeepSeek-V3.1 模型仓库为例
  • 艾体宝洞察 | CRA 合规冲刺指南:艾体宝 ONEKEY 独家报告首发,洞察全球企业合规进度!
  • 网站设计方法常州网站制作维护
  • iOS 26 App 开发阶段性能优化 从多工具协作到数据驱动的实战体系
  • Nginx 配置解析与性能优化
  • vLLM 性能优化实战:批处理、量化与缓存配置方案
  • 【前端】前端浏览器性能优化的小方法
  • google广告联盟网站服务平台型网站