文档章节

机器学习 F1-Score, recall, precision

Airship
 Airship
发布于 2017/08/16 07:55
字数 943
阅读 60
收藏 0

机器学习,模式识别中,我们做分类的时候,会用到一些指标来评判算法的优劣,最常用的就是识别率,简单来说,就是 

Acc=Npre/Ntotal


这里的 Npre表示预测对的样本数,Ntotal表示测试集总的样本数。

 

识别率有的时候过于简单, 不能全面反应算法的性能,除了识别率,还有一些常用的指标,就是我们要介绍的 
F1-score, recall, precision.

在介绍这些概念之前,我们先来看一个二分类的问题,给定一组训练集: 

D={(xi,yi)|xiRn,yi∈{0,1}}Ni=1


这里假定 yi=1 对应正样本,yi=0 对应负样本。假设我们建立了一个分类模型 H, 对每一个输入的样本 xi会输出一个预测值 H(xi), 那么将预测值 H(xi) 与样本对应的实际值yi做比较,会得到以下四种情况:

 

H(xi)=1,yi=1
H(xi)=1,yi=0
H(xi)=0,yi=1
H(xi)=0,yi=0

第一种情况,预测为正,实际也为正,我们称为 true positive (TP),第二种情况,预测为正,实际为负,我们称为 false positive (FP),第三种情况,预测为负,实际为正,称为false negative (FN),最后一种情况,预测为负,实际也为负,称为 true negative (TN),每一个样本只可能属于这四种情况中的某一种,不会有其它的可能。 
很显然,给定一个测试集,我们可以得到如下的关系: 

Npre=TP+TN

 

Ntotal=TP+TN+FP+FN


如果我们定义一个测试集中,正样本个数为P, 负样本个数为N, 那么我们可以知道:P=TP+FNN=TN+FP 
所以,我们常用的识别率 acc 其实就等于 

Acc=TP+TNTP+TN+FP+FN=TP+TNP+N

, 
进一步,我们可以定义 recall ,precision, F1-score 如下所示: 

Recall=TPTP+FN=TPP

 

Precision=TPTP+FP

 

F1=2TP2TP+FN+FP=2⋅PrecisionRecallPrecision+Recall

 

可以看到,recall 体现了分类模型H对正样本的识别能力,recall 越高,说明模型对正样本的识别能力越强,precision 体现了模型对负样本的区分能力,precision越高,说明模型对负样本的区分能力越强。F1-score 是两者的综合。F1-score 越高,说明分类模型越稳健。

比如我们常见的雷达预警系统,我们需要对雷达信号进行分析,判断这个信号是飞行器(正样本)还是噪声 (负样本), 很显然,我们希望系统既能准确的捕捉到飞行器信号,也可以有效地区分噪声信号。所以就要同时权衡recall 和 precision这两个指标,如果我们把所有信号都判断为飞行器,那 recall 可以达到1,但是precision将会变得很低(假设两种信号的样本数接近),可能就在 0.5 左右,那F1-score 也不会很高。

有的时候,我们对recall 与 precision 赋予不同的权重,表示对分类模型的偏好:

 

Fβ=(1+β2)TP(1+β2)TP+β2FN+FP=(1+β2)⋅PrecisionRecallβ2⋅Precision+Recall

 

可以看到,当 β=1,那么Fβ就退回到F1了,β 其实反映了模型分类能力的偏好,β>1 的时候,precision的权重更大,为了提高Fβ,我们希望precision 越小,而recall 应该越大,说明模型更偏好于提升recall,意味着模型更看重对正样本的识别能力; 而 β<1 的时候,recall 的权重更大,因此,我们希望recall越小,而precision越大,模型更偏好于提升precision,意味着模型更看重对负样本的区分能力。

参考来源: 
https://en.wikipedia.org/wiki/Receiver_operating_characteristic 
https://en.wikipedia.org/wiki/F1_score

 

本文转载自:http://blog.csdn.net/matrix_space/article/details/50384518

共有 人打赏支持
Airship
粉丝 38
博文 896
码字总数 19689
作品 0
南京
高级程序员
私信 提问
【算法周】你可以没房没车,但你需要知道这些指标!

欢迎关注哈希大数据微信公众号【哈希大数据】 考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成...

哈希大数据
06/22
0
0
【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值

【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 在前面的(【火炉炼...

炼丹老顽童
08/06
0
0
机器学习-Confusion Matrix混淆矩阵、ROC、AUC

本文整理了关于机器学习分类问题的评价指标——Confusion Matrix、ROC、AUC的概念以及理解。 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工...

Kkky
07/30
0
0
【机器学习实战】理解Scikit-Learn中分类性能度量指标

Understanding Data Science Classification Metrics in Scikit-Learn in Python 在本教程中,我们将介绍Python的scikit-learn中的一些分类度量指标 - 从头开始学习和编写我们自己的函数,以...

技术小能手
08/08
0
0
检索系统的评价指标(准确率、精确率、召回率和F1-measure)

直接上例子 假设班级里有男生60个,女生40个,,,现在检索系统要找出所有女生。假设系统找出了50个人认为是女生,其中实际上男生20个人,女生30个。 准确率(Accuracy):为系统将男生女生分...

zoulala
09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 10 设置 Java 环境变量

首先你需要在我的电脑中打开,找到环境变量属性。 找到环境变量属性 找到环境变量属性后单击将会看到下面的设置界面。 在这个界面中设置高级系统设置。 环境变量 在弹出的界面中选择设置环境...

honeymose
今天
2
0
用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
8
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
4
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部