机器学习评价指标之决策曲线
创始人
2025-01-10 12:37:48
0

决策曲线是一种用于评估和比较不同分类模型性能的工具,它可以帮助研究人员和数据分析者理解模型在不同阈值设置下的收益和风险。以下是一些关于分类模型决策曲线的详细信息:

决策曲线的构成:

  1. 阈值(Threshold):分类模型通常会输出一个概率分数,表示样本属于正类的概率。阈值是用于将概率转换为类别标签的界限。例如,如果阈值设定为0.5,那么概率大于或等于0.5的样本将被分类为正类。

  2. 真正率(True Positive Rate, TPR):也称为灵敏度或召回率,表示所有正类样本中被正确分类为正类的比例。

  3. 假正率(False Positive Rate, FPR):表示所有负类样本中被错误分类为正类的比例。

  4. 净收益(Net Benefit):是真正率与假正率的差值,或者说是分类器在特定阈值下的性能度量。

决策曲线的类型:

  1. 受试者工作特征曲线(Receiver Operating Characteristic, ROC):ROC曲线展示了不同阈值下真正率和假正率的关系。

  2. 提升曲线(Lift Curve):展示了模型相对于随机猜测的绩效提升。

  3. 净收益曲线(Net Benefit Curve):直接展示了不同阈值下的净收益。

如何创建决策曲线:

  1. 计算概率:使用分类模型为每个样本计算属于正类的概率。

  2. 设置阈值:选择一系列阈值(例如,从0到1,以0.01为步长)。

  3. 计算TPR和FPR:对于每个阈值,计算TPR和FPR。

  4. 绘制曲线:在坐标系中,以FPR为横轴,TPR为纵轴,绘制ROC曲线。对于净收益曲线,以阈值为横轴,净收益为纵轴。

决策曲线的应用:

  • 模型比较:通过比较不同模型的决策曲线,可以选择性能最佳的模型。
  • 阈值选择:可以帮助确定最佳的分类阈值,以最大化模型的净收益。
  • 临床决策支持:在医疗领域,决策曲线可以帮助医生理解不同诊断测试的收益和风险。

注意事项:

  • 决策曲线应结合具体的应用背景和业务目标来解释。
  • 在不平衡数据集的情况下,决策曲线的解读需要特别小心,因为假正率和真正率的计算可能会受到少数类的影响。

通过决策曲线,可以更全面地评估分类模型在实际应用中的表现,并作出更合理的决策。

代码实现:

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import roc_curve, auc, roc_auc_score  # 创建一个分类数据集 X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42)  # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=42)  # 训练随机森林分类器 clf = RandomForestClassifier(random_state=42) clf.fit(X_train, y_train)  # 预测测试集的概率 y_score = clf.predict_proba(X_test)[:, 1]  # 计算ROC曲线的FPR和TPR fpr, tpr, thresholds = roc_curve(y_test, y_score) roc_auc = auc(fpr, tpr)  # 绘制ROC曲线 plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic (ROC) Curve') plt.legend(loc="lower right")  # 绘制净收益曲线 # 计算净收益 net_benefit = tpr - fpr # 找到最大的净收益和对应的阈值 max_net_benefit = np.max(net_benefit) best_threshold = thresholds[np.argmax(net_benefit)]  plt.subplot(1, 2, 2) plt.plot(thresholds, net_benefit, color='blue', lw=2, label='Net Benefit') plt.axhline(0, color='black', lw=2, linestyle='--') plt.axvline(best_threshold, color='red', linestyle='--', label='Best Threshold') plt.xlabel('Threshold') plt.ylabel('Net Benefit') plt.title('Net Benefit Curve') plt.legend(loc="lower right")  plt.tight_layout() plt.show() 

在这段代码中,我们首先创建了一个合成数据集,然后使用随机森林分类器进行训练。接着,我们使用测试集来计算分类概率,并使用这些概率来绘制ROC曲线和净收益曲线。

  • ROC曲线显示了不同阈值下模型的性能。
  • 净收益曲线则直接展示了不同阈值下的净收益,帮助确定最佳阈值。

通过这种方式,你可以直观地比较不同模型或同一模型在不同阈值下的表现。

相关内容

热门资讯

总算了解!广西老友有破解吗,开... 总算了解!广西老友有破解吗,开心泉州免费辅助器,攻略教程(有挂分享)1、开心泉州免费辅助器有没有辅助...
无独有偶!微信小程序免费黑科技... 无独有偶!微信小程序免费黑科技透视,微乐小程序多功能修改器法子教程(有挂分享)1、这是跨平台的微乐小...
避坑细节!宝宝游戏辅助,决战卡... 避坑细节!宝宝游戏辅助,决战卡五星游戏辅助器,积累教程(有挂规律)亲,关键说明,决战卡五星游戏辅助器...
据权威媒体报道!微信小程序免费... 据权威媒体报道!微信小程序免费黑科技透视,钱塘十三水其实真的有挂手段教程(有挂详细)1、钱塘十三水其...
实测揭晓!同乡游辅助工具制作,... 实测揭晓!同乡游辅助工具制作,永胜联盟会封号吗,模块教程(有挂教学)1、同乡游辅助工具制作模拟器是什...
实测必看!微信小程序免费黑科技... 实测必看!微信小程序免费黑科技开挂,皮皮胡子辅助举措教程(有挂详细)1、起透看视 微信小程序免费黑科...
一分钟揭秘!微乐小程序免费黑科... 一分钟揭秘!微乐小程序免费黑科技安卓,新超凡软件辅助练习教程(有挂存在)1、微乐小程序免费黑科技脚本...
必备辅助推荐!蜜瓜大厅可以装挂... 必备辅助推荐!蜜瓜大厅可以装挂吗,友友联盟辅助脚本,指南书教程(有挂技术)1、进入游戏-大厅左侧-新...
今日焦点!微信小程序免费黑科技... 今日焦点!微信小程序免费黑科技透视,川南久久辅助模块教程(存在有挂)运微信小程序免费黑科技辅助工具,...
技术分享!山西扣点点辅助工具,... 技术分享!山西扣点点辅助工具,福州十八扑外卦视频,诀窍教程(有挂方法)1、山西扣点点辅助工具公共底牌...