【机器学习300问】48、如何绘制ROC曲线?

        ROC曲线(受试者工作特征曲线)是一种用于可视化评估二分类模型性能的指标。特别是在不同阈值情况下模型对正类和负类的区分能力。那么“阈值”到底是个什么呢?ROC曲线中的每一个点到底是什么意思?

一、ROC曲线的绘制【理论】

        二分类器(模型)输出的是预测样本的正类概率,模型在预测完所有样本的概率后会对其进行降序排序。假设一个样本被二分类器预测输出的概率是0.6,那么到底这个样本是正类还是负类呢?如果我们认为超过0.5的概率就是正类,那么显然该样本的预测标签为“正”。但如果我们认为超过0.6才算正类,那么样本的标签就成“负”的了。所以“阈值”就是人们判定预测结果到底正还是负的一个依据。

        阈值,预测概率大于该阈值样本判定为正,预测概率小于该阈值样本判定为负。ROC曲线绘制的过程,就是逐渐调整阈值,计算每次调整的阈值对应的(FPR,TPR),并在表格上绘制出该点的位置,最后把所有点连起来就得到了ROC曲线。

二、ROC曲线的绘制【实践】

(1)来点数据

序号真实标签模型输出概率(降序排列)
110.95
210.9
310.85
410.8
510.75
600.7
700.65
810.6
900.55
1000.5
1110.45
1200.4
1300.35
1400.3
1510.25
1600.2
1700.15
1800.1
1900.05
2010.0

        假设测试集中有20个样本,如上表所示按照概率降序排列。 分别列出了样本序号,样本真实的分类,模型预测输出的概率。

(2)文字演示

        当阈值为正无穷的时候,也就是说哪怕样本的概率是1,也没有一个样本被模型认为是正类,分类器认为全部都是负的,此时的FP=TP=0,显然FPR=TPR=0,在曲线上的坐标就是(0,0)

        当阈值设定为0.9的时候,上表中样本1和2都被预测为正。此时的P=9,TP=2得到TPR=2/9=0.22。此时没有预测错的样本FP=0算出FPR=0/11=0。最终的在曲线上的坐标就是(0,0.22)

        依次按照文字描述的过程,就可以计算得到所有阈值(这里我们将预测值的分度值设定成0.1,从1.0逐渐下降至0.0)坐标。将点连城线就得到了ROC曲线。

(3)代码演示

① 导入必要的库

import numpy as np
import pandas as pd
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt

② 构造测试集

# 假设我们有如上表格所示的数据存储在一个DataFrame中
sample_data = pd.DataFrame({
    '真实标签': [1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1],
    '模型输出概率': [0.95, 0.9, 0.85, 0.8, 0.75, 0.7, 0.65, 0.6, 0.55, 0.5, 0.45, 0.4, 0.35, 
                     0.3, 0.25, 0.2, 0.15, 0.1, 0.05, 0.0]
})
# 可以输出查看一下sample_data

 ③ 绘制ROC曲线

# 将'真实标签'转化为二进制形式(通常真实标签会被编码为0和1)
true_labels = sample_data['真实标签'].astype(int)

# 获取'模型输出概率'
predicted_probs = sample_data['模型输出概率']

# 计算ROC曲线所需的各项指标
fpr, tpr, _ = roc_curve(true_labels, predicted_probs, pos_label=1)

# 计算曲线下面积(AUC)
roc_auc = auc(fpr, tpr)

# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')  # 平行于坐标轴的直线,代表随机猜测的结果
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic Curve')
plt.legend(loc="lower right")
plt.show()

        如果我们在图中把0.1,0.2一直到1这十个阈值标出来的话,就是下面这个图:

        在我们文字演示时,设定当阈值=0.9的时候,对应的坐标(0.0.22)在图中很清晰的现实出来了。 上图的代码阈值刻度是sklearn.metrics.roc_curve 函数依据模型输出的概率得分y_score,以排序后从最小到最大的顺序依次作为阈值,计算出每个阈值下的真阳性率(TPR)和假阳性率(FPR),从而生成一系列坐标点绘制成ROC曲线。

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 时间依赖ROC曲线绘制是一种用于评估分类器性能的方法,它可以显示出分类器在不同时间点的性能表现。具体来说,ROC曲线是以真正率(TPR)为纵轴,假正率(FPR)为横轴的曲线,它可以帮助我们在不同的阈值下选择最佳的分类器。因此,我可以回答这个题。 ### 回答2: 时间依赖ROC曲线是一种分析预测模型性能的方法。ROC曲线(接收者操作特征)是以真阳性率(TPR)为纵坐标,假阳性率(FPR)为横坐标的图形,用于评估二分类模型在不同阈值下的表现。 时间依赖ROC曲线将时间因素考虑进去,对于时间敏感的模型预测,可以用于评估其性能随时间变化的情况。比如,对于某些医学预测模型,我们可能更关注早期识别疾病的能力,因此需要绘制时间依赖ROC曲线来分析模型在早期识别阶段的性能。这样可以帮助医生更准确地判断患者的病情,并制定更合适的治疗方案。 在绘制时间依赖ROC曲线时,我们将数据按照时间顺序分为若干时间窗口,分别计算每个时间点上的TPR和FPR。然后,通过连接不同时间窗口上的TPR和FPR,就得到了ROC曲线的变化情况。通过对比不同时间窗口上的ROC曲线,可以分析模型在不同时间区域的性能表现,进一步优化模型的预测能力。 绘制时间依赖ROC曲线的过程需要统计相关数据并进行计算,步骤比较繁琐。我们需要准备数据集、模型预测结果等信息,并进行数据的分割和计算。然后,根据得到的TPR和FPR值绘制曲线,并进行分析和解读。 总的来说,时间依赖ROC曲线绘制是一种评估模型预测性能随时间变化的方法。它可以帮助我们更全面地了解模型的表现,指导我们进行后续的模型调整和优化。 ### 回答3: 时间依赖ROC曲线绘制是对一系列时间点下的真阳性率和假阳性率进行可视化的方法。ROC曲线(Receiver Operating Characteristic curve)是一种用于衡量分类模型性能的工具。在时间依赖ROC曲线中,我们将时间作为变量,对分类模型在不同时间点下的预测能力进行评估。 首先,我们需要一定数量的样本数据,其中包括真实标签和模型预测的得分。对于每个时间点,我们根据预测的得分,将样本进行排序。接着,我们可以计算出不同阈值下的真阳性率和假阳性率。真阳性率表示在所有真实阳性样本中,模型正确预测为阳性的比率;假阳性率则表示在所有真实阴性样本中,模型错误地将其预测为阳性的比率。这些比率可以通过计算公式得出,并随着阈值的改变而变化。 绘制时间依赖ROC曲线的过程是将每个时间点下计算的真阳性率作为纵轴,将对应的假阳性率作为横轴,然后将这些点连接起来。ROC曲线可以显示分类模型在不同时间点下的分类性能,越接近左上角的点表示模型性能越好。我们还可以通过计算曲线下面积AUC(Area Under Curve)来量化分类器的性能,AUC越接近1,分类器性能越好。 时间依赖ROC曲线绘制能够给我们提供一个直观的评估模型在不同时间点下的预测能力的方法。通过观察曲线上的点,我们可以了解模型在不同时间点的真阳性率和假阳性率的变化情况,从而判断模型的性能是否稳定,并针对曲线上的点进行分析和改进,从而提升模型的准确性和预测能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值