模型性能分析:ROC 分析和 AUC

本文将介绍模型性能分析的两个方法:ROC & AUC。

ROC 分析和曲线下面积 (AUC) 是数据科学中广泛使用的工具,借鉴了信号处理,用于评估不同参数化下模型的质量,或比较两个或多个模型的性能。

传统的性能指标,如准确率和召回率,在很大程度上依赖于正样本的观察。因此,ROC 和 AUC 使用真阳性率和假阳性率来评估质量,同时考虑到正面和负面观察结果。

从分解问题到使用机器学习解决问题的过程有多个步骤。它涉及数据收集、清理和特征工程、构建模型,最后是,评估模型性能。

当您评估模型的质量时,通常会使用精度和召回率等指标,也分别称为数据挖掘领域的置信度和灵敏度。

这些指标将预测值与通常来自保留集的实际观察值进行比较,使用混淆矩阵进行可视化。

让我们首先关注精度,也称为阳性预测值。使用混淆矩阵,您可以将 Precision 构建为所有真实阳性与所有预测阳性的比率。

召回率,也称为真阳性率,表示真阳性与观察到的和预测的所有阳性的比率。

使用混淆矩阵中的不同观察集来描述 PrecisionRecall,您可以开始了解这些指标如何提供模型性能的视图。

值得注意的是 Precision 和 Recall 只关注正例和预测,而不考虑任何负例。此外,他们不会将模型的性能与中值场景进行比较,中值场景只是随机猜测。

1. ROC 曲线

ROC 作为汇总工具,用于可视化 Precision 和 Recall 之间的权衡。ROC 分析使用 ROC 曲线来确定二进制信号的值有多少被噪声污染,即随机性。它为连续预测器提供了一系列操作点的灵敏度和特异性摘要。ROC 曲线是通过绘制 x 轴上的假阳性率与 y 轴上的真阳性率来获得的。

由于真阳性率是检测信号的概率,而假阳性率是误报的概率,因此 ROC 分析也广泛用于医学研究,以确定可靠地检测疾病或其他行为的阈值。

一个完美的模型将具有等于 1 的误报率和真阳性率,因此它将是 ROC 图左上角的单个操作点。而最差的可能模型将在 ROC 图的左下角有一个单一的操作点,其中误报率等于 1,真阳性率等于 0。

随机猜测模型有 50% 的机会正确预测结果,因此假阳性率将始终等于真阳性率。这就是为什么图中有一条对角线,代表检测信号与噪声的概率为 50/50。

2. AUC 面积

要全面分析 ROC 曲线并将模型的性能与其他几个模型进行比较,您实际上需要计算曲线下面积 (AUC),在文献中也称为 c 统计量。曲线下面积 (AUC) 的值介于 0 和 1 之间,因为曲线绘制在 1x1 网格上,并且与信号理论平行,它是信号可检测性的度量。

这是一个非常有用的统计数据,因为它可以让我们了解模型对真实观察结果和错误观察结果的排名有多好。它实际上是 Wilcoxon-Mann-Whitney 秩和检验的归一化版本,它检验零假设,其中两个有序测量样本是从单个分布 中抽取的。

要绘制 ROC 曲线并计算曲线下面积 (AUC),您决定使用 SckitLearn 的 RocCurveDisplay 方法并将多层感知器与随机森林模型进行比较,以尝试解决相同的分类任务。

import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score, RocCurveDisplay

def plot_roc(model, test_features, test_targets):
    """
    Plotting the ROC curve for a given Model and the ROC curve for a Random Forests Models
    """

    # comparing the given model with a Random Forests model
    random_forests_model = RandomForestClassifier(random_state=42)
    random_forests_model.fit(train_features, train_targets)

    rfc_disp = RocCurveDisplay.from_estimator(random_forests_model, test_features, test_targets)
    model_disp = RocCurveDisplay.from_estimator(model, test_features, test_targets, ax=rfc_disp.ax_)
    model_disp.figure_.suptitle("ROC curve: Multilayer Perceptron vs Random Forests")

    plt.show()

# using perceptron model as input
plot_roc(ml_percetron_model, test_features, test_targets)

本文转载于网络 如有侵权请联系删除

相关文章

  • 巧妙构思-铁死亡调节因子分型预后发6+

    导语铁死亡是一种细胞死亡模式,在肿瘤发生和进展中起着关键作用。背景介绍近年来铁死亡+肿瘤的研究已经发表过许多了,然而有新颖切入点的铁死亡纯生信文章仍然可以发高分!今天小编为大家带来一篇铁死亡调节因子作为signature进行预后分型的文章,发表在实时影响因子6.58的InternationalJournalofBiologicalSciences上。题目为Integrativeanalysisofthemolecularmechanisms,immunologicalfeaturesandimmunotherapyresponseofferroptosisregulatorsacross33cancertypes。数据介绍从KEGG数据库的铁死亡途径中鉴定出41个基因。使用FerrDb数据库确定已鉴定基因的属性并在PubMed和Google学术数据库中手动搜索它们在铁死亡中的功能。30个已知的基因被分为两组:铁死亡驱动因子或抑制因子。33种癌症的基因表达信息和相关临床数据从TCGA下载。免疫治疗队列的数据从cBioPortal数据库(http://www.cbioportal.org/

  • JavaScript: 挑战函数式数据结构

    写篇文章再谈谈函数和数据结构,因为我发现了些有趣的东西。封图来自medium。先前想在自己的函数式方言解释器里实现元组这种数据结构,但是没有什么方向,就去看了下Scheme的语法,看了下Wiki,然后不知不觉间,看到了用Lisp实现Pair。Lisp你可能听过,这里我们不深入研究它,但后面的Pair是啥,它其实是一种很简单、很常见的数据结构,用TyepScript表示就是这样://创建一个pair functioncons(l:number,r:number){ return[l,r] } //取出pair的左边 functioncar(my_pair:number[]){ returnmy_pair[0]; } //取出右边 functioncdr(my_pair:number[]){ returnmy_pair[1]; }复制闲话一下,scheme里创建pair的函数名就是cons,还有它的两个操作car和cdr也是这个名字,因此本文也都用这个名字。好吧,进入正题,形如上面这种样子的数据结构,叫做Pair,在很多js库里也有它的存在,比如React.useState返回的是左边

  • 如何在 CentOS 8 上禁用 SELinux

    SecurityEnhancedLinux或者SELinux是一个安全机制,广泛内置于RHEL系列版本的Linuxkernel中。SELinux给系统添加了一个额外的安全层,它允许管理员和用户基于政策规则控制对对象的访问。SELinux政策规则指定进程和用户如何相互交互,以及进程和用户如何与文件交互。如果没有明显的规则允许对一个对象的访问,例如:一个进程要打开一个文件,这个访问是被禁止的。SELinux有三个操作模式:Enforcing:SELinux允许基于SELinux政策规则的访问Permissive:如果SELinux运行在enforcing模式,那么SELinux仅仅记录被禁止动作的日志。这个模式在调试和创建新政策规则的时候很有用处。Disabled:不加载任何SELinux政策,不记录任何信息。在CentOS8中,SELinux默认被启用,并且处于enforcing模式。强烈推荐将SELinux保持在enforcing模式。当然,有时候它可能打扰到一些应用的运行,并且你需要将它设置成permissive模式或者完全禁用它。在这篇教程中,我们将会讲解如何在CentOS8上禁用

  • [PHP] PDO 提供了三种不同的错误处理模式

    1.PDO::ERRMODE_SILENT静默模式,不终止代码,只能使用$pdo->errorCode()和$pdo->errorInfo()获取错误信息,这个是默认情况下,也就是不停断,不记日志注意这种形式下不容易错误排查 2.PDO::ERRMODE_WARNING警告模式,不终止代码,在错误日志中出现warning类型的错误信息 /var/log/apache/xxx-error.log [FriMar0916:02:502018][error][client61.135.152.130]PHPWarning:PDOStatement::execute():SQLSTATE[42S02]:Basetableorviewnotfound:1146Table'sinanet.mass_list'doesn'texistin/mnt/publi3.PDO::ERRMODE_EXCEPTION异常模式,终止代码,抛出异常信息,使用try()catch(){}捕获 记录到应用日志里/var/log/sinamail/webmail.log

  • 大数据-Hive外部表的操作

    1.Hive表操作1.3.外部表的操作外部表说明 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉管理表和外部表的使用场景 每天将收集到的网站日志定期流入HDFS文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过SELECT+INSERT进入内部表。操作案例 分别创建老师与学生表外部表,并向表中加载数据创建老师表createexternaltablestudent(s_idstring,s_namestring,s_birthstring,s_sexstring)rowformatd复制加载数据loaddatalocalinpath'/export/servers/hivedatas/student.csv'intotablestudent;复制加载数据并覆盖已有数据loaddatalocalinpath'/export/servers/hivedatas/student.csv'o

  • Mui移动端视频自动全屏方法

    varplayer_flg=false; //视频初始化完成 player.on('complete',function(){ //$('#mse.xgplayer-fullscreen').trigger("click"); lockOrientation(); }) //强制横屏及全屏 functionlockOrientation(){ mui.plusReady(function(){ plus.navigator.setFullscreen(true); plus.screen.lockOrientation("landscape-primary"); $('#mse.xgplayer-fullscreen').css('display','none'); $("#videoPlayBox").show(); $(".wrap-top").hide(); }); }

  • 优秀教程推荐|机器学习100天

    人工智能很火所以网上各式各样的资料特别多动辄几十GB,上百GB的云盘链接但是能把一个教程完整看完的少之又少坚持下去确实很难最近在github看到一个很不错的机器学习教程100DaysofMLCodinghttps://github.com/Avik-Jain/100-Days-Of-ML-Code大家可以去关注一下内容从易到难,非常适合刚入门的初学者和想要温故知新的老司机英文不好的同学也不用担心,因为已经有国内的小伙伴把它翻译成了中文传送门:https://github.com/MachineLearning100/100-Days-Of-ML-Code?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.ioup主Avik-Jain非常用心不但给重点内容做了标注还给公式中的难点加了解析不但有知识点的讲解还有算法python实现的数据与代码不过最好还是一边学基础,一边敲一遍代码会发现中间还是会出现很多问题目前该教程已经更新至Day43之后我也会不定期更新文章重新解读并实现每一个算法大家赶紧一起学习吧

  • postgis常用函数介绍(一)

    概述:在进行地理信息系统开发的过程中,常用的空间数据库有esri的sde,postgres的postgis以及mySQL的mysqlgis等等,在本文,给大家介绍的是有关postgis的一些常用函数的意思以及使用。说明:本文中所使用postgres的版本为9.4.0,你可从我的百度网盘获取相关的安装包,安装包地址如下:  postgres:http://pan.baidu.com/s/1o69WORK  postgres空间扩展:http://pan.baidu.com/s/1c0fPfpe先安装postgres,在安装postgres的空间扩展,软件安装好之后就开始了解下postgres的常用函数吧。wkt简介:WKT(Well-knowntext)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。WKT可以表示的几何对象包括:点,线,多边形,TIN(不规则三角网)及多面体。可以通过几何集合的方式来表示不同维度的几何对象。 几何物体的坐标可以是2D(x,y),3D(x,y,z),4D(x,y,z,m),加上一个属于线性参照系统的m值。 以下为几何WKT字

  • 2018-7-18pythoh中函数的参数,返回值,变量,和递归

    ************************************************************************************                  函数中的参数的初级和返回值: 技术文档中[]方括号里面的东西表示可选的 参数:函数运行需要的数据 如果没有参数会提示:missing1requiredpositional,函数的两个要点,参数和返回值: 1.如果函数有参数在调用执行函数的时候要把参数写里面,如;defshow_info(name):        #括号里面的参数是形参:形参可以写多参    print(“用户为:%s”%name) show_info("李易峰"):       #括号里面是实参:如果形参有多个传递实参时也必须要写多个数据,多写                            少些都不对 2.如果参数有返回值,需要用返回值时要定义一个变量接收返回值,如果不接收的话返回值不会打印出来,如: defcheck():   print("表演人:")   name

  • 如何用六点教会老婆写 Python ?

    本文来源|代码湾什么是code?code就就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如,你让你老公去买个西瓜,你老公会自己决定去哪里买,买几个,找个搞活动打折的买,总之,你给他钱,他就给你买回来让你吃到爽的西瓜。但是,你想让计算机买一个西瓜?你要告诉他:去门口的鲜丰水果店买,买沙瓤无子西瓜,若旁边的店打折,就去旁边的店买。总之,你不能让计算机做任何决定,你要清楚的告诉他所有情况下的所有的行为。而code,就是你和计算机交流的语言,或者说是对计算机的命令。我们就把计算机理解为一个人,这个人很死板,只能按照你给他的详细命令进行工作。而这个人工作速度特别特别快,并且保证工作结果都是正确的。编程语言其实不重要,重要的是要明白如何和计算机交流,明白了这个也就能看懂代码了。编程=算法+数据结构python就是一种和计算机交流的语言,这种语言单词(关键字)不多,规则也少。下面所有的内容都基于python。1判断当你命令计算机做一件事情的时候,这件事情可能分一些情况进行处理。 判断通常涉及到的关键字有:if,else,elseif,and,or,<,

  • zctf web100的简单分析

    zctfweb100的简单分析FromChaMd5安全团队核心成员Pcatweb100xctf2017第二站的zctf,web100的链接点开之后,只看到ha?一个作为ctf的web第一题,题目简介是“简单点”,那么先查找源代码、header等信息,没发现什么有用的,于是直接上简单的扫描器,扫到了一个1.php,进去后是phpinfo();的界面翻阅一番后没发现什么,估计是个坑。于是回到index.php,继续看那个ha?,按以往经验,ctf的web题一部分是有源码的(让人可以源码审计,不然纯黑盒测试就太难了),所以先尝试常见的源码备份,幸运的是访问.index.php.swp(最前面有一个点,表示是隐藏文件,.swp文件是因为vi不正常退出产生的)有效,右键查看源码即可得到如下源码。源码分析如下:1.get提交flag参数2.flag中不能等于155623.flag中要包含zctf字样4.md5(flag)的中间16位要跟md5(15562)中间16位相等(php的substr(string,start,length)相当于python的string[start:start+leng

  • [LeetCode] 1317. Convert Integer to the Sum of Two No-Zero Integers 将整数转换为两个无零整数的和

    No-Zerointeger isapositiveintegerthat doesnotcontainany 0 initsdecimalrepresentation. Givenaninteger n,return alistoftwointegers [A,B] where: A and B are No-Zerointegers. A+B=n Thetestcasesaregeneratedsothatthereisatleastonevalidsolution.Iftherearemanyvalidsolutionsyoucanreturnanyofthem. Example1: Input:n=2 Output:[1,1] Explanation:A=1,B=1.A+B=nandbothAandBdonotcontainany0intheirdecimalrepresentation. 复制 Example2: Input:n=11 Output:[

  • 【洛谷P6805】春季大扫除

    题目 题目链接:https://www.luogu.com.cn/problem/P6805 春季大扫除也许是我们一生中最无聊的事情之一。当然,对于Flóra和她的母亲而言,今年的春季大扫除要有意思得多。因为她们在地毯下发现了一张已被灰尘覆盖的树形地图。 这棵树有\(N\)个节点,节点从\(1\)到\(N\)进行编号,这\(N\)个点通过\(N-1\)条边相连。这些边上都积累了过多的灰尘,因此Flóra的母亲准备对这棵树进行清理。 清理这棵树的过程是这样的:Flóra的母亲每次在这棵树上选择两个叶子节点(定义一棵树的叶子节点为只与恰好一个点直接相连的点),并对这两个叶子点路径上的所有边进行清理。如果这条路径上有\(d\)条边,则清理的费用为\(d\)。当这棵树上的所有边都被清理后,这棵树的清理过程就完成了。清理这棵树的总费用即为各次清理的费用之和。 因为她想保护这棵树的叶子节点,因此对于每个叶子节点,她最多只会选择一次。 Flóra认为原来的树过于简单,她决定对原始的树进行一些改造。在第\(i\)次改造中,她在原始的树的基础上添加了\(D_i\)个叶子节点。具体来说,她会在原始的树上选

  • Python异常处理

    1.python中的异常和错误分为两种   (1)语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 deftest: pass #语法错误示范三 print(haha复制   (2)逻辑错误(逻辑错误) #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>:") int(num) #无法完成计算 res1=1/0 res2=1+'str'复制 2.什么是异常   异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下: 3.python中异常的种类   在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 #触发IndexError l=['egon','aa'] l[3] #触发KeyError dic={'name':'dis'} dic['age'] #触发ValueError s='hello' int(s)复制 #经常出现的异常

  • NOIP2018赛前

      从开始接触OI到现在已经三年了,感觉自己的进步是微乎其微的。这三年好像一场梦,很多东西从无到有,从不会到会,但是一些不会的终究是不会,一些想不到的终究是想不到。离比赛越近,才越发现自己的无知,终于是到了赛前,看到自己那么多不会的题,想要写些什么,否则感觉自己这三年怕是留不下什么。这三年,虽然是在学习,但是相较而言其实就是在颓废,自己不知在什么时候开始,热情逐渐退却,可是自己却没有察觉,也许是不愿察觉吧。赛前发这么丧气的话貌似不太好,还是希望今年能取得自己理想的成绩吧。

  • [转载]反无人机企业DroneShield利用声音识别侦测无人机

    原文:http://www.cnbeta.com/articles/495071.htm   无人机产业正在蓬勃发展,受益的不仅仅是那些生产小型飞行设备的企业。专家估计仅在澳大利亚就有5万架商用无人机以及消遣用无人机。然而这也意味着有5万次无人机飞到禁飞区域的可能,执法部门将面临数量庞大的无人机所带来的挑战。DroneShield是一家率先推出反无人机商用产品的企业,他们于2014年成立于美国,如今他们希望能在澳大利亚开辟出广阔的市场。 反无人机产品如何工作? 雷达、调频无线电以及摄像头科技都可以用于侦测无人机,但是DroneShield采用的是声音感知技术。该企业的CEOJamesWalker如是说。 “我们会记录下几处地点的噪音,然后利用我们的专利技术去除背景杂音,随后我们就可以辨识出是否为无人机的声响。”他解释道。 目前该企业的技术可以实现的声音识别距离达到了1公里,同时他们还有较短距离的无人机声音识别产品,这些产品都可以实时地将信息反馈给使用者。Walker表示他们企业还出售通知服务以及声音库,售价根据市场需求浮动,最高价格略低于1万美元。 昆士兰科技大学澳大利

  • 20172319 《程序设计与数据结构》 第八周学习总结

    201723192018.11.04-11.11 《程序设计与数据结构》第8周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 学习进度条 参考资料 教材学习内容总结 第十二章优先队列与堆 12.1 堆: 堆(heap)**:具有两个附加属性**的二叉树;是一棵完全二叉树。 最小堆(minheap):每一结点小于或等于其两个孩子;其根的两个孩子同样为最小堆。 最大堆(maxheap):每一结点大于或等于其两个孩子;其根的两个孩子同样为最大堆。 元素相同,构造的堆也可以不同: 堆的**操作**: |操作|说明| |--------|:----------------:| |addElement|将给定元素添加到该堆中| |removeMin|删除堆的最小元素| |findMin|返回一个指向堆中最小元素的引用| 12.1.1 addElement操作: 将给定的元素添加至适当位置,并维持好该堆的完全性和有序性 对于堆而言,因为其是一棵完全二叉树,所以在插入时

  • C#之Hello World(入门 )

    C#是一种简单、现代、面向对象和类型安全的编程语言。 C#由C和C++发展而来。C#(英文发音Csharp)牢固地植根于C和C++语言族谱中,是Microsoft专门为使用.NET平台而创建的。 •简单 C#具有C++所没有的一个优势就是学习简单。该语言首要的目标就是简单。很多功能用C#实现很简单。 在C#中,没有C++中流行的指针。在C++中,有::、和->操作符,它们用于名字空间、成员和引用。对于新手来说,操作符至今仍是学习的一道难关。C#弃用其它操作符,仅使用单个操作符“.”。 •现代 对于企业级的编程语言来说,新增的金融数据类型(decimal)很受欢迎。您用到了一种新的十进制数据类型,它专用于金融计算方面。 全面的内存管理已经不是您的任务。运行时提供了一个垃圾收集器,负责C#程序中的内存管理。 •面向对象: C#的核心是面向对象程序设计,C#支持所有关键的面向对象的概念,如封装、继承和多态性。 1.封装 封装是一种程序设计机制,它绑定代码及其操作的数据,并使它们不受外界干涉和误用的影响,从而保证安全性. C#的基本单元是类,类定义对象的形式,它指定数据和操

  • logback节点配置详解

    一:根节点 <configuration></configuration> 属性: debug:默认为false,设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。 scan:配置文件如果发生改变,将会重新加载,默认值为true; scanPeriod:检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位时毫秒,当scan为true时,这个属性生效,默认时间间隔为1min。   <?xmlversion="1.0"encoding="utf-8"?>1<configurationdebug="true"scan="true"scanPeriod="2"> 2<!--TODO:子节点信息--> 3</configuration>复制 可以这样描述配置文件的基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<ro

  • 报表如何嵌入到网页并接收参数?

    需求:客户在自己的BS业务系统或者项目中,需要在增加报表功能。需要将WynEnterprise开发好的报表,嵌入到Web报表页面并接收外部的参数值。本文以html页面嵌入为例,介绍如何嵌入报表并传递参数。实现效果:实现步骤:一、使用WynEnterprise设计含参的报表;    含参报表的设计方法请参考帮助文档:https://help.grapecity.com.cn/pages/viewpage.action?pageId=38473696    本教程示例以销售明细数据为例,报表参数为:             二、获取报表的URL    设计完报表并保存之后,预览报表。点击又上角新窗口预览。以获取当前包的URL。    例如:http://localhost:51980/reports/vi

  • Weex系列一、构建Weex工程

    Weex比ReactNative更简单,更容易学习,并且做到真正的跨平台,一套代码可以多个平台运行。所以建议大家都用Weex吧。 一、安装Node 已经安装Node的,请忽略过去。 检查Node是否安装的命令: $node-v v7.3.0 大家可以看阿里团队的博文,我这里也说下。 1、要先安装Node。在Mac我是用Homebrew来安装的。 安装命令:brewinstallnode 2、接着我们需要安装WeexCLI。 终端中执行:sudonpminstall-gweex-toolkit   3、npm是Node的模块管理器,执行install因为连的是国外的服务器,事件可能会很慢。如果大家运行上面的语句很慢可以按下面的来做,如果大家已经FQ,就不用按下面的来了。 3.1、删除代理设置: #npmconfigdeleteproxy #npmconfigdeletehttps-proxy 然后终端执行: npm--registryhttps://registry.npm.taobao.orginfounderscore  也可以用下面2种方法: 3

相关推荐

推荐阅读