ROC,AUC曲线

本文深入解析混淆矩阵和ROC曲线在二分类问题中的应用,对比predict与predict_proba方法,详细解释ROC曲线的绘制原理及关键指标,通过实战案例帮助读者掌握评估模型性能的核心技巧。

一、混淆矩阵,ROC曲线 都是针对二分类问题
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_) # y_test:测试目标值,y_测试预测值
plt.matshow(cm, cmap=plt.cm.Greens) #可视化

二.Roc :
1.predict(x_test) 与 predict_proba(x_test)的区别:
predict(x_test) 得分预测目标值
predict_proba(x_test):模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1。

2.from sklearn.metrics import auc,roc_curve,f1_score

这个方法主要用来计算ROC曲线面积的;

sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)

Parameters :

y_true : 数组,测试目标值
y_score : 数组, 目标得分
pos_label:int or str, 标签被认为是积极的,其他的被认为是消极的。

sample_weight: 顾名思义,样本的权重,可选择的

drop_intermediate: boolean, optional (default=True)

是否放弃一些不出现在绘制的ROC曲线上的次优阈值。这有助于创建更轻的ROC曲线

Returns :

fpr : array, shape = [>2] 增加假阳性率,例如,i是预测的假阳性率,得分>=临界值[i]

tpr : array, shape = [>2] 增加真阳性率,例如,i是预测的真阳性率,得分>=临界值[i]。

thresholds : array, shape = [n_thresholds]

减少了用于计算fpr和tpr的决策函数的阈值。阈值[0]表示没有被预测的实例,并且被任意设置为max(y_score) + 1

要弄明白ROC的概念可以参考 :https://www.deeplearn.me/1522.html

介绍ROC曲线的两个重要指标:

真阳性率 = true positive rate = TPR = TP/ (TP + FN)

可以这样理解:真阳性率就是在标准的阳性(标准的阳性就等于真阳性加假阴性=TP + FN)中,同时被检测为阳性的概率,有点绕,自行理解。

假阳性率 = false positive rate = FPR = FP / (FP+TN)

可以这样理解:假阳性就是在标准的阴性(标准的阴性就等于假阳性加真阴性=FP + TN)中,被检测为阳性的概率。很好理解的,本来是阴性,检测成了阳性的概率就是假阳性率呗。

ROC曲线就由这两个值绘制而成。接下来进入sklearn.metrics.roc_curve实战,找遍了网络也没找到像我一样解释这么清楚的。

import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
y 就是标准值,scores 是每个预测值对应的阳性概率,比如0.1就是指第一个数预测为阳性的概率为0.1,很显然,y 和 socres应该有相同多的元素,都等于样本数。pos_label=2 是指在y中标签为2的是标准阳性标签,其余值是阴性。
所以在标准值y中,阳性有2个,后两个;阴性有2个,前两个。

接下来选取一个阈值计算TPR/FPR,阈值的选取规则是在scores值中从大到小的以此选取,于是第一个选取的阈值是0.8

scores中大于阈值的就是预测为阳性,小于的预测为阴性。所以预测的值设为y_=(0,0,0,1),0代表预测为阴性,1代表预测为阳性。可以看出,真阴性都被预测为阴性,真阳性有一个预测为假阴性了。

FPR = FP / (FP+TN) = 0 / 0 + 2 = 0

TPR = TP/ (TP + FN) = 1 / 1 + 1 = 0.5

thresholds = 0.8

我们验证一下结果

print(fpr[0],tpr[0],thresholds[0])

同代码结果一致,其余的就不演示了,剩下的阈值一次等于 0.4 0.35 0.1 自行验证。

最后结果等于

print(fpr,’\n’,tpr,’\n’,thresholds)

全部代码

import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
print(fpr,’\n’,tpr,’\n’,thresholds)

auc_ = auc(fpr,tpr)

### 如何用Python绘制ROC_AUC曲线 要使用 Python 绘制 ROCAUC 曲线,可以借助 `scikit-learn` 库中的工具以及 `matplotlib` 来完成可视化。以下是详细的说明和示例代码。 #### 使用 `scikit-learn` 计算 ROCAUC 值 通过 `roc_curve` 函数可以从真实标签 (`y_true`) 和预测的概率得分 (`y_score`) 中计算出假正类率 (False Positive Rate, FPR) 和真正类率 (True Positive Rate, TPR),并进一步利用 `auc` 函数计算曲线下面积 (Area Under Curve, AUC)[^3]。 #### 可视化 ROC 曲线 为了更直观地展示模型的表现,可以通过 `matplotlib` 将 ROC 曲线绘制成图形,并标注其对应的 AUC 值[^1]。 下面是完整的代码示例: ```python from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt import numpy as np # 示例数据:真实的类别标签和预测的概率分数 y_true = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) # 计算FPR、TPR和阈值 fpr, tpr, thresholds = roc_curve(y_true, y_scores) # 计算AUCroc_auc = auc(fpr, tpr) # 创建画布 plt.figure(figsize=(8, 6)) plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC曲线 (AUC = {roc_auc:.4f})') plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') # 随机分类器(AUC = 0.5) # 设置坐标轴范围和其他属性 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() ``` 上述代码实现了以下功能: 1. 利用 `roc_curve` 函数获取 FPR 和 TPR 的数值序列。 2. 调用 `auc` 方法计算 ROC-AUC 值。 3. 使用 `matplotlib` 进行可视化的呈现,其中还包括一条代表随机猜测的虚线作为对比基准。 #### 关于 ROCAUC 的意义 ROC 曲线展示了不同决策阈值下模型区分能力的变化情况;而 AUC 是衡量整个二元分类器效能的一个指标,它反映了任意一对正负样本被正确排序的可能性大小[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值