sklearn—roc_curve,roc_auc_score

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import roc_auc_score

# 加载数据
mnist = fetch_openml('mnist_784', version=1, parser='auto')
X, y = mnist['data'], mnist['target']
X = np.array(X)
y = np.array(y)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]

# 打乱训练集
shuffle_index = np.random.permutation(60000)
X_train, y_train = X_train[shuffle_index], y_train[shuffle_index]

# 创建二元标签
y_train_5 = (y_train == '5')
y_test_5 = (y_test == '5')

# 训练模型
clf = SGDClassifier(random_state=42)
clf.fit(X_train, y_train_5)

# 使用交叉验证预测获取决策分数
y_scores = cross_val_predict(clf, X_train, y_train_5, method="decision_function")

# 计算ROC曲线
fpr, tpr, thresholds = roc_curve(y_train_5, y_scores)

# 绘制ROC曲线
plt.plot(fpr, tpr, label="ROC Curve")
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

# 计算ROC曲线下面积auc
auc = roc_auc_score(y_train_5, y_scores)
print(auc)

1. 使用交叉验证预测获取决策分数

y_scores = cross_val_predict(clf, X_train, y_train_5, method="decision_function")

获取模型对每个样本的决策分数,这些分数随后被用于计算ROC曲线和AUC分数,以评估模型对于识别数字"5"的性能。

在分类任务中,很多模型不仅可以输出预测类别,还可以输出一个决策分数或概率估计,表示模型对每个类别的置信度。对于二分类问题,SGDClassifier 默认的决策函数返回的是样本属于正类的分数。通过指定 method="decision_function" ,cross_val_predict 将为每个输入样本返回这个决策分数,而非直接的分类预测(正类或负类)。

2. 计算ROC曲线

fpr, tpr, thresholds = roc_curve(y_train_5, y_scores)

计算 ROC 曲线的各个点,并返回假正例率(False Positive Rate, FPR)、真正例率(True Positive Rate, TPR)以及用于生成这些率的决策阈值(Thresholds)。

3. 计算ROC曲线下面积auc

auc = roc_auc_score(y_train_5, y_scores)

4. thresholds、auc

阈值(Thresholds)

在分类任务中,模型通常输出一个连续的决策分数或概率估计来表示样本属于某个类别的置信度。通过设置不同的阈值,这些连续的分数会被转换为二元的分类结果(例如,正类或负类)。调整阈值会影响到模型的TPR和FPR,进而影响模型的性能表现。

曲线下面积(Area Under the Curve, AUC)

AUC是ROC曲线下的面积,提供了一个量化模型在所有可能的分类阈值下性能的方式。AUC的值介于0和1之间,一个完美的分类器的AUC为1,而一个完全随机的分类器的AUC为0.5。AUC越接近1,表示模型的性能越好。

5. 运行结果


相关推荐
java1234_小锋42 分钟前
机器学习里面什么是过拟合?如何解决?
人工智能·机器学习
sonadorje1 小时前
通俗易懂的Gram矩阵讲解
人工智能·机器学习·矩阵
咚咚王者1 小时前
人工智能之核心基础 机器学习 第二十章 深度学习入门
人工智能·深度学习·机器学习
戴西软件1 小时前
戴西软件发布3DViz设计与仿真数据轻量化平台
大数据·人工智能·安全·机器学习·汽车
小汤圆不甜不要钱1 小时前
「Datawhale」RAG技术全栈指南 Task 3
人工智能·深度学习·机器学习·rag
阿豪Jeremy1 小时前
LlamaFactory微调Qwen3-0.6B大模型实验整理——调一个人物领域专属的模型
人工智能·深度学习·机器学习
爱思德学术2 小时前
中国计算机学会(CCF)推荐学术会议-A(数据库/数据挖掘/内容检索):SIGIR 2026
机器学习·自然语言处理·信息检索
Hcoco_me2 小时前
大模型面试题88:cuda core的数量 与 开发算子中实际使用的线程 关系是什么?过量线程会发生什么情况?
人工智能·深度学习·机器学习·chatgpt·职场和发展·机器人
油泼辣子多加2 小时前
【信创】华为昇腾大模型训练
人工智能·机器学习·数据挖掘
audyxiao0012 小时前
会议热点扫描|机器学习顶级会议ICML 2025的研究热点与最新趋势分析
人工智能·机器学习·icml·会议热点