随机分类器的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 ...
随机推荐
- SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>
一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...
- JAVA中在Myeclipse里把表导入成相应的poco实体类
参考:地址: http://blog.csdn.net/jintaiyong/article/details/7383982
- c++ ,类型转换
一.隐式转换 1)精度低转高,sigend转unsigend2)数值0,会转为为指针. 数组名会转换为首地址.3)bool转换 .0为false.其他为true.-1也是true...4)非const ...
- [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...
- Oracle存储过程中异步调用的实际操作步骤
本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用 .而有些相关的业务逻辑 ...
- Object Pascal 语法之异常处理
http://www.cnblogs.com/spider518/archive/2010/12/30/1921298.html 3 结构化异常处理 结构化异常处理(SHE)是一种处理错误的手段,使得 ...
- 【CDN】域名无法访问,ping不到,tracert不到
背景:香港服务器,CDN服务商:Incapsula 1.首先猜测,域名是否被墙 原因:ip可以直接访问到网站,其他域名指向服务器也可访问 排查:1)首先理解,怎样才算被墙:大陆外可以通过该域名访问,大 ...
- Spring多数据源的配置和使用
1. 配置多个数据源 最近开发一个数据同步的小功能,需要从A主机的Oracle数据库中把数据同步到B主机的Oracle库中.当然能够用dmp脚本或者SQL脚本是最好,但是对于两边异构的表结构来说,直接 ...
- c++ 对象内存分配和虚函数
1. c++类对象(不含虚函数)在内存中的分布 c++类中有四种成员:静态数据.非静态数据.静态函数.非静态函数. 1. 非静态数据成员放在每个对象内部,作为对象专有的数据成员 2. 静态数据成员被抽 ...
- a++ ++a 文件上传函数错误 smarty模板特点
b = a++; 会先把a初始的值赋值给b,然后a自增1. c = ++a; 先把a自增1,再把增1以后的结果赋值给c. 只要记住在使用的时候 $a++ 是先返回$a,再将$a本身的值改变. ...