ROC曲线的绘制

ROC(Receiver Operating Characteristic)曲线全称是“受试者工作特征”,通常用来衡量一个二分类学习器的好坏。如果一个学习器的ROC曲线能将另一个学习器的ROC曲线完全包住,则说明该学习器的性能优于另一个学习器。

在绘制ROC曲线的时候,首先明白ROC曲线的横纵坐标分别代表的是什么。

下面介绍下混淆矩阵。在评价二分类器会经常用到的表格。

纵坐标:TPR=TP/(TP+FN)

横坐标:FPR=TP/(FP+TN)

那么上面的指标已经介绍完了,如何根据这些指标去绘制合适的ROC曲线呢:

实际上对于许多学习器在判定二分类问题时是预测出一个对于真值的范围在[0.0, 1.0]之间的概率值,而判定是否为真值则看该概率值是否大于设定的阈值(Threshold)。例如如果阈值设定为0.5则所有概率值大于0.5的均为正例,其余为反例。因此对于不同的阈值我们可以得到一系列相应的FPR和TPR,从而绘制出ROC曲线。 

y_true = [0, 1, 0, 1],真实值 

y_score = [0.1, 0.35, 0.4, 0.8], 预测概率值 

分别取4组判定正例用的阈值:[0.1, 0.35, 0.4, 0.8],可得相应4组FPR,TPR:

FPR: [1, 0.5, 0.5, 0] 
TPR: [1, 1, 0.5, 0.5] 

则可以根据这四个点绘制出对应的ROC曲线了。

ROC曲线所覆盖的面积称为AUC(Area Under Curve),可以更直观的判断学习器的性能,AUC越大则性能越好。对于该例的AUC值为0.75。

### 绘制ROC曲线的方法 绘制接收者操作特性(Receiver Operating Characteristic, ROC曲线是一种评估分类模型性能的重要方法。以下是通过 Python 使用 `matplotlib` 和 `scikit-learn` 库实现绘制 ROC 曲线的具体方式。 #### 方法概述 为了绘制 ROC 曲线,需要先计算假正类率(FPR)和真正类率(TPR)。这些指标可以通过预测概率值与真实标签之间的比较得出。具体来说: 1. **准备数据**:获取真实的类别标签以及模型预测的概率分数。 2. **计算 FPR 和 TPR**:利用 `roc_curve` 函数从 scikit-learn 计算不同阈值下的 FPR 和 TPR 值[^1]。 3. **计算 AUC**:使用 `auc` 函数计算曲线下面积(Area Under Curve, AUC),作为模型整体表现的一个量化指标[^2]。 4. **绘图**:借助 `matplotlib` 或其他可视化库完成图形展示[^4]。 #### 示例代码 下面是一个完整的示例代码片段,演示如何使用上述步骤绘制 ROC 曲线并计算其 AUC 值。 ```python import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 加载数据集 data = datasets.load_breast_cancer() X = data.data y = data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建支持向量机模型 model = SVC(kernel='linear', probability=True) model.fit(X_train, y_train) # 获取预测概率 y_score = model.predict_proba(X_test)[:, 1] # 计算 FPR、TPR 及阈值 fpr, tpr, thresholds = roc_curve(y_test, y_score) # 计算 AUC 值 roc_auc = auc(fpr, tpr) # 绘制 ROC 曲线 plt.figure(figsize=(8, 6)) plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})') 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('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic Example') plt.legend(loc="lower right") plt.show() ``` 此代码展示了如何加载乳腺癌数据集,构建 SVM 模型,并最终生成 ROC 图形及其对应的 AUC 数值[^3]。 #### 关键点解释 - 数据预处理阶段确保输入特征标准化或规范化有助于提升模型效果。 - 调整模型参数可能会影响 ROC 曲线形状及 AUC 大小。 - 如果采用交叉验证,则需多次重复以上过程并将结果平均化以获得更稳健估计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值