随机分类器的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 ...
随机推荐
- Mybatis Generator(定制化)代码生成器
1.使用Mapper专用的MyBatis Generator插件 通用Mapper在1.0.0版本的时候增加了MyBatis Generator(以下简称MBG)插件,使用该插件可以很方便的生成实体类 ...
- iOS - OC 语言新特性
前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 O ...
- (七)shell编程学习
1.shell程序练习:创建一个dir文件夹,在dir文件夹里再创建一个cd.c文件 首先vim hello.sh 2.shell中的变量定义和引用 (1)变量定义和初始化.shell是弱类型语言(语 ...
- Android提高篇之自定义dialog实现processDialog“正在加载”效果、使用Animation实现图片旋转
知识点: 1.使用imageview.textview自定义dialog 2.使用Animation实现图片旋转动画效果 3.通过自定义theme去掉dialog的title 没有使用progres ...
- nginx的location root 指令
原文:http://blog.csdn.net/bjash/article/details/8596538 location /img/ { alias /var/www/image/; } #若按照 ...
- Spring MVC 之拦截器(八)
在springMVC中实现拦截器有两种方式 1.实现HandlerInterceptor接口 2.继承HandlerInterceptorAdaptor类 编写拦截器: package com.cy ...
- php防止sql注入
[一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...
- 解析excel表格为DataSet
using System;using System.Collections.Generic;using System.Data;using System.Data.OleDb;using System ...
- python2 urllib 笔记
python2 urllib 笔记 import urllib base='http://httpbin.org/' ip=base+'ip' r=urllib.urlopen(ip) print r ...
- VC++编译GSL
目录 第1章 VC++ 1 1.1 修改行结束符 1 1.2 修改#include "*.c" 为 #include "*.inl" 2 1. ...