【机器学习系列】如何将多条ROC曲线画在一张图里,并解决文本遮挡问题

2023-11-07

有的时候我们需要将ROC曲线输出在同一张图中,这样可以更加直观地对比模型;并且我们常常会遇到在图形中有文字相互遮挡的问题,我们可以用adjustText中的adjust_text来实现文本不相互遮挡并添加箭头的功能。

 定义多条roc曲线画图函数

def multi_models_roc(names, prob_results, colors,linestyles, y_test, save=True, dpin=100):
   """
   将多个机器模型的roc图输出到一张图上

   Args:
       names: list, 多个模型的名称
       prob_results: 使用模型预测的概率值(predict_proba()函数的返回值)
       colors: 想绘制的曲线的颜色列表
       linestyles: 想绘制的曲线的线型
       save: 选择是否将结果保存(默认为png格式)

   Returns:
       返回图片对象plt
   """
        
    plt.figure(figsize=(10, 10), dpi=dpin)
    from adjustText import adjust_text
    texts = []
    for (name, result, colorname,linestylename) in zip(names, prob_results, colors, linestyles):
        y_test_predprob = result[:,1]
        fpr, tpr, thresholds = roc_curve(y_test, y_test_predprob)
        
        optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds)
#         plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')
#         texts.append(plt.text(optimal_point[0], optimal_point[1], name+' '+f'Threshold:{optimal_th:.2f}'))
        texts.append(plt.text(optimal_point[0], optimal_point[1], name))
        plt.plot(fpr, tpr, lw=3, label='{} (AUC={:.3f})'.format(name, auc(fpr, tpr)),color = colorname,linestyle=linestylename)
        plt.plot([0, 1], [0, 1], '--', lw=3, color = 'grey')
        plt.axis('square')
        plt.xlim([0, 1])
        plt.ylim([0, 1.05])
        plt.xlabel('False Positive Rate',fontsize=10)
        plt.ylabel('True Positive Rate',fontsize=10)
        plt.title('ROC Curve',fontsize=20)
        plt.legend(loc='lower right',fontsize=10)
    adjust_text(texts, 
            arrowprops=dict(
    			arrowstyle='->',#箭头样式 
    			lw= 2,#线宽
    			color='red')#箭头颜色
           )
    if save:
        plt.savefig('multi_models_roc.png')
    return plt

调用函数画图

names = ['Logistic Regression',
         'Naive Bayes',
         'Decision Tree',
         'Random Forest',
         'SVM',
         'Neural Network',
         'GBDT',
         'LightGBM',
         'XGBoost'
        ]

#这是各个模型的预测值返回列表
prob_results = [lg_y_prob,
                nb_y_prob,
                tree_y_prob,
                rf_y_prob,
                svm_y_prob,
                bp_y_prob,
                gbdt_y_prob,
                lgb_y_prob,
                xgb_y_prob
                ]
 
colors = ['crimson',
          'orange',
          'gold',
          'mediumseagreen',
          'steelblue', 
          'mediumpurple' ,
          'black',
          'silver',
          'navy'
         ]

linestyles = ['-', '--', '-.', ':', 'dotted', 'dashdot', '--', 'solid', 'dashed']
 
#ROC curves
train_roc_graph = multi_models_roc(names, prob_results, colors, linestyles,  Y_test_smo_tmo, save = True)
train_roc_graph.savefig('ROC_Train_all.png')

结果展示:

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【机器学习系列】如何将多条ROC曲线画在一张图里,并解决文本遮挡问题 的相关文章

随机推荐

  • Hexo更换主题

    使用Hexo更换主题还算方便 先使用克隆命令安装好主题 然后更改一下博客的配置文件D hexo config yml里面的主题名称就好了 1 安装主题 在博客目录D hexo下右键点击Git Bash 输入以下命令 其他的主题也类似操作 g
  • WIN10下怎么找到MYSQL5.7数据库中存储数据的位置以及重装mysql数据复盘

    由于我换了个m 2的固态硬盘 我重装系统 但是重装系统之后 我mysql之前的版本是5 5的 然后不能启动 我想这重装吧 我想在重装肯定装5 7的了 我就从官网下载了5 7版本 安装完毕 但是我想把我的之前的数据库以及表数据都复盘到mysq
  • 用了TCP协议,就一定不会丢包嘛?

    表面上我是个技术博主 但没想到今天成了个情感博主 我是没想到有一天 我会通过技术知识 来挽救粉丝即将破碎的感情 掏心窝子的说 这件事情多少是沾点功德无量了 事情是这样的 最近就有个读者加了我的绿皮聊天软件 女生 头像挺好看的 就在我以为她要
  • 使用安信可IDE开发ESP8266时出现error: ld returned 1 exit status

    在 app Makefile中COMPONENTS eagle app v6 后面添加driver libdriver a 并在 app driver中添加Makefile文件 这里建议直接复制 examples IoT Demo文件夹并删
  • css苹果手机字号变大,css – 智能手机字体大小不一致

    我正在调整一个网页 使其在智能手机上看起来不错 我已经在CSS文件中声明了一个 media部分 所以我可以指定这个页面的字体大小 这是媒体部分 media screen and max device width 640px TermsOfU
  • 【计算机网络系列】网络层②:详解网际协议IP中的IP地址

    网际协议IP 网际协议IP Internet Protocol 是TCP IP体系中两个最主要的协议之一 也是最重要的互联网标准协议之一 与协议IP配套使用的还有三个协议 地址解析协议ARP Address Resolution Proto
  • win10下 + cuda10.2 + 双目相机zed 2i sdk的安装

    zed 2i 环境搭建 1 安装cuda和cudnn 2 安装zed sdk 3 安装API 本实验用的是pycharm平台 python3 7 主要讲解zed 2i sdk的安装以及遇到的问题 1 安装cuda和cudnn 我们实验之前已
  • qt中在QMultiMap中删除自定义数据类的元素

    引言 当我们使用QMultiMap的remove函数来删除容器中的某一个元素时 若是容器中存放的是基本数据类型 则程序编译的时候没有任何问题 但是当容器中存放的是自定义的数据 这时若是C 基础比较扎实的 应该不会出现编译报错的问题 但是C
  • 桥接模式下虚拟机连不上网络的解决方法

    新建的虚拟机 开启虚拟机后 无法ping到网络 ping www baidu com 显示如下 无法连接到网络 或者输入命令 ifconfig ens33网卡显示像下面这样 没有自动分配ip地址 也可能是ens0网卡 正常连上网络 会自动为
  • 精确计算-BigDecimal类

    基本方法 加法 add 函数 减法 subtract 函数 乘法 multiply 函数 除法 divide 函数 绝对值 abs 函数 重点介绍除法 使用除法函数在divide的时候要设置各种参数 要有除数 精确的小数位数和舍入模式 舍入
  • BUUctf-web:[ACTF2020 新生赛]Exec1

    1 就是按位或 直接执行 后面的语句 2 就是逻辑或 如果前面命令是错的那么就执行后面的语句 否则只执行前面的语句 3 就是按位与 前面和后面命令都要执行 无论前面真假 4 就是逻辑与 如果前面为假 后面的命令也不执行 如果前面为真则执行两
  • Form表单之get提交与post提交

    Form表单之get提交与post提交 Form表单的属性action 与method 属性 值 描述 action URL 规定当提交表单时向何处发送数据 method get post 规定用于发送form data的HTTP方法 提交
  • 兆易创新嵌入式软件工程师笔试题目解析

    哈喽 大家好 今天分享的是兆易创新的嵌入式软件开发工程师的笔试题目 这份题目中等难度 考察基础知识的偏多 最后的编程题只考了一个结构体数组的初始化 所以 在准备校招时 将重点还是要放在基础知识上 下面看下这份题目你可以答几分 本文已同步更新
  • Connect Dynamics 365 and Social Engagement

    Establish a connection between Social Engagement and Dynamics 365 To connect Dynamics 365 online and Social Engagement b
  • 通达信四色谱四量图源码_通达信指标公式源码波段抄底副图指标

    入市建仓 VAR2 REF LOW 1 VAR3 SMA ABS LOW VAR2 13 1 SMA MAX LOW VAR2 0 13 1 100 VAR4 EMA IF CLOSE 1 2 VAR3 13 VAR3 13 13 VAR5
  • 飞书文档导出pdf不带书签/大纲 问题

    问题 我在飞书上整理了很多笔记 有天想把它导出本地 主要原因是有时候网络不好时 网页版的飞书加载比较慢 此外 我还想将其打印成纸质版来看 比较有感觉 飞书我是可以看到各个大纲级别的标题的 一级大纲 二级大纲这样整理非常方便 但是当我导出为p
  • 交叉编译tslib (正确版)

    1 下载安装交叉编译器 编译器版本不限 需要与系统移植时的编译器保持一致即可 2 下载tslib1 4 3 交叉编译tslib 1 4 下载的tslib 1 4 tar gz放到 home driver ts 目录下 cd home dri
  • 手写算法-Python代码实现非线性回归

    手写算法 Python代码实现非线性回归 生成非线性数据集 1 用线性回归拟合 2 多项式拟合 sklearn实现 校验系数的结果 总结 生成非线性数据集 前面我们介绍了Python代码实现线性回归 今天 我们来聊一聊当数据呈现非线性时 这
  • 嵌入式监控【v4l2采集->vpu编码->live555推流】

    嵌入式监控 v4l2采集 gt vpu编码 gt live555推流 文章目录 嵌入式监控 v4l2采集 gt vpu编码 gt live555推流 介绍 数据流图 一 v4l2 1 1 确定cam的输出格式 1 2 YUYV 转 YUV4
  • 【机器学习系列】如何将多条ROC曲线画在一张图里,并解决文本遮挡问题

    有的时候我们需要将ROC曲线输出在同一张图中 这样可以更加直观地对比模型 并且我们常常会遇到在图形中有文字相互遮挡的问题 我们可以用adjustText中的adjust text来实现文本不相互遮挡并添加箭头的功能 定义多条roc曲线画图函