随机分类器的ROC和Precision-recall曲线
随机分类器,也就是对于一个分类问题,随机猜测答案。理论上,随机分类器的性能是所有分类器的下界。对随机分类器的理解,可以帮助更好的理解分类器的性能指标。随机分类器的性能也可以作为评价分类器的一个基础。所以简单写了几行代码来研究一下随机分类器的性能。用的是scikit-learn包。
这里产生了一个正负样本比例为7:3的样本。由于是随机猜测,所以feature数据就不需要了。随机分类器对每个样本,输出一个[0, 1)之间的数作为正样本的概率。分类以0.5为阈值,评价了几个主要的指标,并画出ROC和Precision-recall曲线。
import numpy as np
import numpy.random as r
import sklearn.metrics as m
import pylab as pl def main():
size = 1000000
y_true = np.array([ 1 if i >= 0.3 else 0 for i in r.random(size) ], dtype=np.float32)
y_pred = r.random(size)
y_cls = np.array([ 1 if i >= 0.5 else 0 for i in y_pred ], dtype=np.float32)
print m.classification_report(y_true, y_cls) fpr, tpr, th = m.roc_curve(y_true, y_pred)
ax = pl.subplot(2, 1, 1)
ax.plot(fpr, tpr)
ax.set_title('ROC curve') precision, recall, th = m.precision_recall_curve(y_true, y_pred)
ax = pl.subplot(2, 1, 2)
ax.plot(recall, precision)
ax.set_ylim([0.0, 1.0])
ax.set_title('Precision recall curve') pl.show() if __name__ == '__main__':
main()
几个主要指标如下 。
precision recall f1-score support 0.0 0.30 0.50 0.37 299977
1.0 0.70 0.50 0.58 700023 avg / total 0.58 0.50 0.52 1000000
ROC和Precision-recall曲线见下。
ROC曲线是一条y=x的直线,AUC=0.5。ROC曲线的横轴和纵轴分别是fpr和tpr,可以理解为将负例分为正例的概率,以及将正例分为正例的概率。注意,这里的分母都是实际的正例/负例数目。也就是说,ROC曲线反映了分类器对正例的覆盖能力和对负例的覆盖能力之间的权衡。
而Precision-recall曲线是一条y=0.7的直线,0.7为样本中正例的比例。横轴recall也就是tpr,反映了分类器对正例的覆盖能力。而总轴precision的分母是识别为正例的数目,而不是实际正例数目。precision反映了分类器预测正例的准确程度。那么,Precision-recall曲线反映了分类器对正例的识别准确程度和对正例的覆盖能力之间的权衡。对于随机分类器而言,其precision固定的等于样本中正例的比例,不随recall的变化而变化。
随机分类器的ROC和Precision-recall曲线的更多相关文章
- Precision/Recall、ROC/AUC、AP/MAP等概念区分
1. Precision和Recall Precision,准确率/查准率.Recall,召回率/查全率.这两个指标分别以两个角度衡量分类系统的准确率. 例如,有一个池塘,里面共有1000条鱼,含10 ...
- 机器学习:评价分类结果(Precision - Recall 的平衡、P - R 曲线)
一.Precision - Recall 的平衡 1)基础理论 调整阈值的大小,可以调节精准率和召回率的比重: 阈值:threshold,分类边界值,score > threshold 时分类为 ...
- Handling skewed data---trading off precision& recall
preision与recall之间的权衡 依然是cancer prediction的例子,预测为cancer时,y=1;一般来说做为logistic regression我们是当hθ(x)>=0 ...
- TP Rate ,FP Rate, Precision, Recall, F-Measure, ROC Area,
TP Rate ,FP Rate, Precision, Recall, F-Measure, ROC Area, https://www.zhihu.com/question/30643044 T/ ...
- 评价指标整理:Precision, Recall, F-score, TPR, FPR, TNR, FNR, AUC, Accuracy
针对二分类的结果,对模型进行评估,通常有以下几种方法: Precision.Recall.F-score(F1-measure)TPR.FPR.TNR.FNR.AUCAccuracy 真实结果 1 ...
- Classification week6: precision & recall 笔记
华盛顿大学 machine learning :classification 笔记 第6周 precision & recall 1.accuracy 局限性 我们习惯用 accuracy ...
- 查准与召回(Precision & Recall)
Precision & Recall 先看下面这张图来理解了,后面再具体分析.下面用P代表Precision,R代表Recall 通俗的讲,Precision 就是检索出来的条目中(比如网页) ...
- 目标检测的评价标准mAP, Precision, Recall, Accuracy
目录 metrics 评价方法 TP , FP , TN , FN 概念 计算流程 Accuracy , Precision ,Recall Average Precision PR曲线 AP计算 A ...
- Precision,Recall,F1的计算
Precision又叫查准率,Recall又叫查全率.这两个指标共同衡量才能评价模型输出结果. TP: 预测为1(Positive),实际也为1(Truth-预测对了) TN: 预测为0(Negati ...
随机推荐
- iOS - OC 内存管理
1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...
- iOS - Socket 网络套接字
1.Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 Socket.Socket 又称 "套接字",应用程序通常通过 "套接字& ...
- c 函数调用产生的汇编指令和数据在内存情况(1)
一直对函数调用的具体汇编指令和各种变量在内存的具体分配,一知半解.各种资料都很详细,但是不实践,不亲自查看下内存总不能笃定.那就自己做下. 两个目的: 一,函数和函数调用编译后的汇编指令基本样貌 二, ...
- maven setting.xml配置说明
文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${use ...
- jpeg了解
JPEG是一个压缩标准,又可分为标准 JPEG.渐进式JPEG及JPEG2000三种: ①标准JPEG:以24位颜色存储单个光栅图像,是与平台无关的格式,支持最高级 别的压缩,不过,这种压缩是有损耗的 ...
- Android布局_帧布局FrameLayout
一.FrameLayout布局概述 在这个布局中,所有的子元素都不能被指定放置的位置,他们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡 如下面的 ...
- python 远程执行命令、上传、下载举例
使用python中的 paramiko 实现远程操作,需要安装 paramiko 模块. # vi pssh.py #!/usr/bin/python #coding=utf-8 ''' Create ...
- 数据字典 dba_free_space及相对文件号RELATIVE_FNO 小结
1.1 dba_free_space 1.1.1 概述 SQL> desc dba_free_space; Name Type Nullable Default Comments ------- ...
- Spring MVC 基础注解之@RequestMapping、@Controller、(二)
我现在学的是spring4.2 今天主要学习了Spring MVC注解 引入注解可以减少我们的代码量,优化我们的代码. @Controller:用于标识是处理器类: @RequestMapping:请 ...
- 在Eclipse中设置Java类上面的注释(包含作者、日期等)
希望在Eclipse中,让Java类上面的注释像下面这样,改如何设置呢? 在Eclipse中,点击菜单中的Window-->Preferences,打开如下窗口: