机器学习:评价分类结果(ROC 曲线)
一、基础理解
1)定义
- ROC(Receiver Operation Characteristic Curve)
- 定义:描述 TPR 和 FPR 之间的关系;
- 功能:应用于比较两个模型的优劣;
- 模型不限于是否通过极度偏斜的数据训练所得;
- 比较方式:ROC 曲线与坐标图形边界围成的面积,越大模型越优;
- TPR(True Positive Rate):真正率;被预测为正的正样本结果数 / 正样本实际数:TPR = TP /(TP + FN);
- TNR(True Negative Rate):真负率;被预测为负的负样本结果数 / 负样本实际数:TNR = TN /(TN + FP) ;
- FPR(False Positive Rate):假正率;被预测为正的负样本结果数 /负样本实际数:FPR = FP /(TN + FP) ;
- FNR(False Negative Rate):假负率;被预测为负的正样本结果数 / 正样本实际数:FNR = FN /(TP + FN) ;
- 召回率(Recall)和精度(Precise)是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量;
2)与 P - R 曲线的区别
- P - R 曲线:应用于判定由极度有偏数据所训练的模型的优劣;
- ROC 曲线:应用于比较两个模型的优劣;
- 模型:可以是同样算法不同超参数所得的不同模型,也可以是不同算法所得的不同模型;
3)TPR 和 FPR 的关系
- 关系:
- 随着阈值 threshold 的增大,FPR 和 TPR 都逐渐减小;
- FPR 和 TPR 称正相关关系,FPR 越高,TPR 相应的也越高;
二、代码实现 FPR 和 TPR,并绘制 ROC 曲线
1)封装
- TPR
def TPR(y_true, y_predict):
tp = TP(y_true, y_predict)
fn = FN(y_true, y_predict)
try:
return tp / (tp + fn)
except:
return 0. - FPR
def FPR(y_true, y_predict):
fp = FP(y_true, y_predict)
tn = TN(y_true, y_predict)
try:
return fp / (fp + tn)
except:
return 0.
2)例
- 求 TPR 和 FPR
import numpy as np
from sklearn import datasets digits = datasets.load_digits()
X = digits.data
y = digits.target.copy()
y[digits.target==9] = 1
y[digits.target!=9] = 0 from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666) from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
decision_scores = log_reg.decision_function(X_test) from playML.metrics import FPR, TPR fprs = []
tprs = []
thresholds = np.arange(np.min(decision_scores), np.max(decision_scores), 0.1) for threshold in thresholds:
# dtype='int':将数据类型从 bool 型转为 int 型;
y_predict = np.array(decision_scores >= threshold, dtype='int')
fprs.append(FPR(y_test, y_predict))
tprs.append(TPR(y_test, y_predict)) 绘制 ROC 曲线
import matplotlib.pyplot as plt
plt.plot(fprs, tprs)
plt.show()
分析:
- ROC 曲线与图形边界围成的面积,作为衡量模型优劣的标准,面积越大,模型越优;
- 可以是同样算法不同超参数所得的不同模型,也可以是不同算法所得的不同模型;
三、scikit-learn 中的ROC
模块及使用格式
from sklearn.metrics import roc_curve fprs, tprs, thresholds = roc_curve(y_test, decision_scores)
计算 ROC 曲线与坐标轴围成的面积:称 ROC 的 auc;
面积越大,模型越优;
from sklearn.metrics import roc_auc_score roc_auc_score(y_test, decision_scores)
机器学习:评价分类结果(ROC 曲线)的更多相关文章
- 机器学习性能度量指标:ROC曲线、查准率、查全率、F1
错误率 在常见的具体机器学习算法模型中,一般都使用错误率来优化loss function来保证模型达到最优. \[错误率=\frac{分类错误的样本}{样本总数}\] \[error=\frac{1} ...
- ROC曲线绘制
ROC 曲线绘制 个人的浅显理解:1.ROC曲线必须是针对连续值输入的,通过选定不同的阈值而得到光滑而且连续的ROC曲线,故通常应用于Saliency算法评价中,因为可以选定0~255中任意的值进行阈 ...
- scikit-learn机器学习(二)逻辑回归进行二分类(垃圾邮件分类),二分类性能指标,画ROC曲线,计算acc,recall,presicion,f1
数据来自UCI机器学习仓库中的垃圾信息数据集 数据可从http://archive.ics.uci.edu/ml/datasets/sms+spam+collection下载 转成csv载入数据 im ...
- [机器学习]-分类问题常用评价指标、混淆矩阵及ROC曲线绘制方法
分类问题 分类问题是人工智能领域中最常见的一类问题之一,掌握合适的评价指标,对模型进行恰当的评价,是至关重要的. 同样地,分割问题是像素级别的分类,除了mAcc.mIoU之外,也可以采用分类问题的一些 ...
- 机器学习:分类算法性能指标之ROC曲线
在介绍ROC曲线之前,先说说混淆矩阵及两个公式,因为这是ROC曲线计算的基础. 1.混淆矩阵的例子(是否点击广告): 说明: TP:预测的结果跟实际结果一致,都点击了广告. FP:预测结果点击了,但是 ...
- 机器学习:评价分类结果(Precision - Recall 的平衡、P - R 曲线)
一.Precision - Recall 的平衡 1)基础理论 调整阈值的大小,可以调节精准率和召回率的比重: 阈值:threshold,分类边界值,score > threshold 时分类为 ...
- ROC曲线-阈值评价标准
ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性 ...
- 机器学习常见的几种评价指标:精确率(Precision)、召回率(Recall)、F值(F-measure)、ROC曲线、AUC、准确率(Accuracy)
原文链接:https://blog.csdn.net/weixin_42518879/article/details/83959319 主要内容:机器学习中常见的几种评价指标,它们各自的含义和计算(注 ...
- 机器学习之分类器性能指标之ROC曲线、AUC值
分类器性能指标之ROC曲线.AUC值 一 roc曲线 1.roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性 ...
随机推荐
- centos下安装Anaconda
第一步:将下载好的Anaconda2-4.1.1-Linux-x86_64.sh软件传到linux下 第二步:[hadoop@spark1 ~]$ cd Desktop #进入到该软件所在目录,我的放 ...
- JavaWeb -- 四个域对比 request,servletContext, Session, pageContext
requsest: 程序产生数据,用完了就没有用了, 用request, 作用范围:一个请求范围. Session: 程序产生数据,用完了 等一下还要使用, 用Session, 作用范围: 一个会话范 ...
- Ant入门
一.Ant介绍 Ant是Java的生成工具,是Apache的核心项目:直接在apache官网下载即可: Ant类似于Unix中的Make工具,都是用来编译.生成: Ant是跨平台的,而Make不能: ...
- js简单工厂
我以计算器为例写一个简单工厂模式,只完成加减乘除4个计算功能,考虑到其他功能方便日后扩展,遵循开放-封闭原则. 简单工厂类图: 先看一下C#的简单工厂是如何实现的: 定义抽象类Operation,加减 ...
- html5笔记(标签)
1.aside aside字面理解为“旁边”,在html5中范围更广一点,是跟主内容相关,但是又可以独立的内容 ,可以是广告.引用.侧边栏等等. html5站的例子就是新闻的内容页或者列表页,以列表页 ...
- open inventor 学习笔记
初次接触open inventor,跟以前学习一种新的东西,都想要先做出个小的helloworld程序,这个当然也不例外. 首先会创建一个窗口句柄,初始化一下场景数据库. HWND window = ...
- Visual Studio for Mac 安装
有一周时间没有更新博客了,最近这段时间真是苦不堪言,上周四晚上,一杯水将我的MBP报废掉了,开机状态,键盘进水,当场就关机了,很担心当时爆炸了,幸好还只是关机,然后就...没有然后了.第二天插电源可以 ...
- MSDN 单机 MVC 帮助文档
因为微软的mvc框架也是从开源框架演变而来的,所以微软没把mvc帮助文档放到单击帮助文档中.sososos下载好msdn单机帮助后,却找不到 System.Web.MVC 等命名空间的东西. 解决办法 ...
- LeetCode OJ:Binary Search Tree Iterator(二叉搜索树迭代器)
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...
- 条款42:了解typename的双重含义
typename在很多种情况下与class是完全相同的,例如下面的使用: templame<typename T> ...... template<class T> ..... ...