有篇讲解原理的博文/论文(可看可不看):《为什么Decision Tree可以绘制出ROC曲线?》

一、数据,并要先one-hot多分类标签

from sklearn.preprocessing import label_binarize
y_test = label_binarize(y_test, classes=[0, 1, 2, 3, 4])
n_classes = y_test.shape[1]            # 几分类(我这里是5分类)

二、构建模型,注意OVR类的使用(OneVsRestClassifier)

# 实例化决策树,基尼指数,训练集训练
from sklearn.multiclass import OneVsRestClassifierdtc = OneVsRestClassifier(DecisionTreeClassifier(criterion="gini",min_samples_leaf=3, max_depth=15))
# clf为拟合好的模型
clf = dtc.fit(X=X_train, y=y_train)# 概率分数y_score ,是一个shape为(测试集条数, 分类种数)的矩阵。
# 比如你测试集有200条数据,模型是5分类,那矩阵就是(200,5)。
# 矩阵的第(i,j)元素代表第i条数据是第j类的概率。
y_score = clf.predict_proba(X_test)

三、绘图

第1个图 PR曲线

from sklearn.metrics import precision_recall_curve
# Plot the macro-averaged Precision-Recall curve
# For each class
precision = dict()
recall = dict()
average_precision = dict()
for i in range(n_classes):precision[i], recall[i], _ = precision_recall_curve(y_test[:, i],y_score[:, i])average_precision[i] = average_precision_score(y_test[:, i], y_score[:, i])# A "macro-average": quantifying score on all classes jointly
precision["macro"], recall["macro"], _ = precision_recall_curve(y_test.ravel(),y_score.ravel())
average_precision["macro"] = average_precision_score(y_test, y_score,average="macro")
print('Average precision score, macro-averaged over all classes: {0:0.2f}'.format(average_precision["macro"]))# plt.figure()
# 因为我自己的数据是5分类,所以我为了放在一张图上,设置了2X3的格子
plt.subplot(2, 3, iter_)
iter_ += 1plt.step(recall['macro'], precision['macro'], where='post')plt.xlabel('Recall')
plt.ylabel('Precision')
plt.ylim([0.0, 1.05])
plt.xlim([0.0, 1.0])
plt.title('Average precision score, macro-averaged over all classes: AP={0:0.3f}'.format(average_precision["macro"]))

第2个图 ROC曲线(分别计算每一类下面面积为AUC值)

from sklearn.metrics import roc_curve, auc
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])roc_auc[i] = auc(fpr[i], tpr[i])# plt.figure()
# 因为我自己的数据是5分类,所以我为了放在一张图上,设置了2X3的格子
plt.subplot(2, 3, iter_)
iter_ += 1
lw = 1
colors = ['blue', 'red', 'green', 'black', 'yellow']
for i, color in zip(range(n_classes), colors):plt.plot(fpr[i], tpr[i], color=color, lw=lw,label='ROC curve of class {0} (area = {1:0.3f})'''.format(i, roc_auc[i]))plt.plot([0, 1], [0, 1], 'k--', lw=lw)
plt.xlim([-0.05, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic for multi-class data')
plt.legend(loc="lower right")
plt.show()

与上面不一样的是,也可以直接计算AUC值

auc()这个函数快被取消了,建议之后多用roc_auc_score,但是《sklearn:为什么roc_auc_score()和auc()有不同的结果? 博客园》

from sklearn.metrics import roc_auc_score
y_score = clf.predict_proba(X_test)
print(f"AUC={roc_auc_score(y_test, y_score, average='micro')}")   # 注意这里的y_test在多分类时也是需要one-hot过的


全部参考:

  • 《为什么Decision Tree可以绘制出ROC曲线?》(原理)
  • 官方文档《Precision-Recall》
  • 《如何获得决策树的ROC曲线?》
  • 《绘制决策树分类器的多类ROC曲线》看该论坛问题下面的回答
  • 《多分类下的ROC曲线和AUC》
  • 官方文档《sklearn.metrics.roc_curve》
  • 《sklearn:为什么roc_auc_score()和auc()有不同的结果? 博客园》(区别)

sklearn决策树/随机森林多分类绘制ROC和PR曲线相关推荐

  1. sklearn实现随机森林(分类算法)

    阿喽哈~小伙伴们,今天我们来唠一唠随机森林 ♣ ♣ ♣ 随机森林应该是很多小伙伴们在学机器学习算法时最先接触到的集成算法,我们先简单介绍一下集成学习的大家族吧: Bagging:个体评估器之间不存在强 ...

  2. 机器学习sklearn实战-----随机森林调参乳腺癌分类预测

    机器学习sklearn随机森林乳腺癌分类预测 机器学习中调参的基本思想: 1)非常正确的调参思路和方法 2)对模型评估指标有深入理解 3)对数据的感觉和经验 文章目录 机器学习sklearn随机森林乳 ...

  3. 机器学习实战之分类算法(K-近邻/朴素贝叶斯/决策树/随机森林)

    机器学习分类算法 1. 机器学习算法简介 1.1 按照学习方式分类 1.2 区别 1.3 关于监督学习中的分类与回归区别 1.4 机器学习开发流程 2. 数据集介绍与划分 2.1 sklearn数据集 ...

  4. 菜菜的sklearn课堂——随机森林

    1.概述 1.1 集成算法概述 集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现. 1.2 sklearn中的集成算法 sklearn中的集成算 ...

  5. 机器学习——决策树+随机森林

    目录 决策树 认识决策树 决策树的生成 信息的单位--比特 信息熵 决策树的划分依据之一--信息增益 例题--银行贷款分析 决策树的其他分类依据 案例--泰坦尼克号乘客生存分类 决策树的结构.本地保存 ...

  6. 决策树随机森林GBDTXGBoost学习笔记以及代码实现

    文章目录 1. 引入 1.1 决策树 1.2 随机森林 1.3 GBDT(Gradient Boosting Decision Tree)梯度提升决策树 1.4 XGBoost(eXtreme Gra ...

  7. HuaPu在学:机器学习——sklearn【随机森林】

    随机森林 文章目录 随机森林 一.集成算法 二.RandomForestClassifier [控制基评估器的参数] [n_estimators] [random_state] [bootstrap ...

  8. sklearn的随机森林实现泰坦尼克号旅客生存预测

    sklearn的随机森林实现泰坦尼克号旅客生存预测 介绍 数据集介绍 算法 学习器 分类器 实现 数据下载与导入 预处理 建立模型 评估,预测 结果 代码 介绍 参考资料: https://wenku ...

  9. 决策树随机森林GBDT

    决策树算法 这篇文章: https://zhuanlan.zhihu.com/p/26703300  对决策树算法说的非常深入浅出 决策树模型核心是下面几个部分: (1) 结点和有向边组成 (2) 结 ...

最新文章

  1. 什么是L1/L2/L3 Cache?
  2. oracle glogin.sql sql _user,为什么我的login.sql不执行?
  3. Java成员变量和局部变量的区别
  4. layui 开启关闭标签_layui新手入门所踩的一些坑
  5. JavaScript中通过点击单选框动态显示和隐藏组件
  6. pip 指定版本安装
  7. Django数据库配置
  8. 【PATL1-46】整除光棍(模拟除法)---水题
  9. 合宙Air724UG二次开发(2):资料描述
  10. 【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用
  11. 手机android系统安装,如何重新安装Android手机系统
  12. BE-Gradient 微流控芯片用于胶质母细胞瘤的研究
  13. LigerUI的简单使用示例
  14. 最新版WIN10安装教程(官方纯净版)(适用于新机以及旧机重装系统或升级系统)
  15. 职场人:你知道自己值多少钱吗?
  16. c罗说什么语言,那些年属于C罗的经典语录,那一句话最感动你?
  17. 自控原理学习笔记-系统稳定性分析(2)-环路分析及Nyquist-Bode判据
  18. 小米平板4刷入twrp
  19. T解 湖南师大附中集训 模拟考试1
  20. 利用dcmtk工具查询PACS,找到同一患者两次以上的检查的数据

热门文章

  1. 猴子选大王 java_基于java数据结构链表写的猴子选大王
  2. CSS(字体、背景)
  3. STM8S看门狗配置失败的原因
  4. 白洁血战Node并发编程 - 预览
  5. iperf 测试网络试用
  6. web前端自学还是去培训?
  7. 短视频如何挣钱?做为副业怎么样?
  8. html 边框效果,css实现边框动画效果
  9. 智能音箱Sonos美国上市:发行价15美元 开盘上涨6.7%
  10. 计算机命令怎么输入,装备属性指令怎么输入 装备属性指令输入方法