机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线
发布日期:2021-06-30 15:41:12 浏览次数:4 分类:技术文章

本文共 2426 字,大约阅读时间需要 8 分钟。

 

 

文章目录

  • ROC与AUC
    • 1.ROC
    • 2.AUC
  • 代码实现

 


前言

内容接上一篇

上篇文章提到的这篇文章不做过多叙述。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ROC与AUC

很多学习器是为了测试样本产生的一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。主要看需要建立的模型侧重于想用在测试数据的泛华性能的好坏。排序本身的质量好坏体系了综合考虑学习去在不同任务下的“期望泛化性能”的好坏。ROC曲线则是从这个角度出发来研究学习器泛化性能。

1.ROC

ROC的全称是“受试者工作特征”曲线,与P-R曲线相似。与P-R曲线使用查准率、查全率为纵、横坐标不同,ROC曲线的纵轴是“真正例率”{简称TPR),横轴是“假正例率”(简称FPR)二者分别定义为:

TPR=\frac{TP}{TP+FN}      FPR=\frac{FP}{TN+FP}

ROC曲线图以真正例率为Y轴,假正例率为X轴。

2.AUC

进行检验判定ROC曲线性能的合理判据是比较ROC曲线下的面积,即AUC。从定义知AUC可通过对ROC曲线下各部分的面积求和而得,AUC可估算为:

AUC=\frac{1}{2} \sum_{i=1}^{m-1}(x_{i+1}-x_{i})*(y_{i}+y_{i+1})

从形式化看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。因此存在排序损失。

 

二、代码实现

形式基本和P-R曲线差不多,只是几个数值要改一下。

代码如下(示例):

from sklearn import svm, datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import roc_curve, aucfrom itertools import cyclefrom sklearn.preprocessing import label_binarize #标签二值化LabelBinarizer,可以把yes和no转化为0和1,或是把incident和normal转化为0和1。import numpy as npfrom sklearn.multiclass import OneVsRestClassifieriris = datasets.load_iris()# 鸢尾花数据导入X = iris.data#每一列代表了萼片或花瓣的长宽,一共4列,每一列代表某个被测量的鸢尾植物,iris.shape=(150,4)y = iris.target#target是一个数组,存储了data中每条记录属于哪一类鸢尾植物,所以数组的长度是150,所有不同值只有三个random_state = np.random.RandomState(0)#给定状态为0的随机数组y = label_binarize(y, classes=[0, 1, 2])n_classes = y.shape[1]n_samples, n_features = X.shapeX  = np.c_[X, random_state.randn(n_samples, 200 * n_features)]#添加合并生成特征测试数据集X_train, X_test, y_train, y_test = train_test_split(X, y,                                                    test_size=0.25,                                                    random_state=0)#根据此模型训练简单数据分类器classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,                                 random_state=random_state))#线性分类支持向量机y_score = classifier.fit(X_train, y_train).decision_function(X_test)#用一个分类器对应一个类别, 每个分类器都把其他全部的类别作为相反类别看待。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曲线面积    roc_auc[i] = auc(fpr[i], tpr[i])fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])import matplotlib.pyplot as pltplt.figure()lw = 2plt.plot(fpr[2], tpr[2], color='darkorange',         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')plt.xlabel('FPR')plt.ylabel('TPR')plt.ylim([0.0, 1.0])plt.xlim([0.0, 1.0])plt.legend(loc="lower right")plt.title("Precision-Recall")plt.show()

 

效果


总结

下篇为KNN近邻算法

 

参阅博客:

转载地址:https://jxnuxwt.blog.csdn.net/article/details/108793878 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Nosql数据库原理学习:CAP原理、BASE和最终一致性
下一篇:Bootstrap项目实践:Grid布局应用

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月09日 17时46分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

通过发布/订阅的设计模式搞懂 Node.js 核心模块 Events 2019-05-01
Vue Router 实现动态路由和常见问题解决方案;17 个场景,带你入门 CSS 布局 2019-05-01
Chrome 页面呈现原理与性能优化(内附分享 ppt) 2019-05-01
中高级前端面试经验整理;55个提高你CSS开发效率的必备片段 2019-05-01
手把手画出一份属于自己的JavaScript原型图 2019-05-01
掘金小册8折优惠:掌握这些技术,轻松拿offer 2019-05-01
前端插件化架构的思考 2019-05-01
Promise|async|Generator 实现&原理大解析;JavaScript进阶之高阶函数篇 2019-05-01
带你深度解锁Webpack系列(优化篇) 2019-05-01
提升你react和js编码的5个技巧;必须知道的 this 用法和陷阱 2019-05-01
vue 中4个级别的作用域;写 React Hooks 前必读 2019-05-01
写给女朋友的中级前端面试秘籍;面试专题总结:Vue 知识总结 2019-05-01
用原生js手写前端图片压缩上传插件;三年前端路:分享我的工作经验与学习经历... 2019-05-01
20200426 前端日报:ECMAScript 2020 的新功能速成 2019-05-01
面试中常考的字符串操作方法大全,包含ES6 2019-05-01
Vue.js 专栏课程推荐,助你更好迎接Vue 3.0 2019-05-01
尤小右:VitePress 初步实现小目标,极简静态站点生成器 2019-05-01
如何关注尤雨溪和 Vue.js 2019-05-01
CSS 中calc()的完整指南(一) 2019-05-01
Vue 3中令人激动的新功能:Fragment+Suspense+多v-model 2019-05-01