机器学习 F1-Score, recall, precision

2022-11-18 15:22:11 浏览数 (2)

在机器学习,模式识别中,我们做分类的时候,会用到一些指标来评判算法的优劣,最常用的就是识别率,简单来说,就是 A c c = N p r e / N t o t a l Acc=N_{pre}/N_{total} Acc=Npre​/Ntotal​ 这里的 N p r e N_{pre} Npre​表示预测对的样本数, N t o t a l N_{total} Ntotal​表示测试集总的样本数。

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

在介绍这些概念之前,我们先来看一个二分类的问题,给定一组训练集: D = { ( x i , y i ) ∣ x i ∈ R n , y i ∈ { 0 , 1 } } i = 1 N D={ (x_{i}, y_{i}) | x_{i} in R^{n}, y_{i} in {0, 1} }_{i=1}^{N} D={ (xi​,yi​)∣xi​∈Rn,yi​∈{ 0,1}}i=1N​ 这里假定 y i = 1 y_{i}=1 yi​=1 对应正样本, y i = 0 y_{i}=0 yi​=0 对应负样本。假设我们建立了一个分类模型 H H H, 对每一个输入的样本 x i x_{i} xi​ 会输出一个预测值 H ( x i ) H(x_{i}) H(xi​), 那么将预测值 H ( x i ) H(x_{i}) H(xi​) 与样本对应的实际值 y i y_{i} yi​做比较,会得到以下四种情况:

H ( x i ) = 1 , y i = 1 H(x_{i})=1, y_{i}=1 H(xi​)=1,yi​=1

H ( x i ) = 1 , y i = 0 H(x_{i})=1, y_{i}=0 H(xi​)=1,yi​=0

H ( x i ) = 0 , y i = 1 H(x_{i})=0, y_{i}=1 H(xi​)=0,yi​=1

$H(x_{i})=0, y_{i}=0 $

第一种情况,预测为正,实际也为正,我们称为 true positive (TP),第二种情况,预测为正,实际为负,我们称为 false positive (FP),第三种情况,预测为负,实际为正,称为false negative (FN),最后一种情况,预测为负,实际也为负,称为 true negative (TN),每一个样本只可能属于这四种情况中的某一种,不会有其它的可能。 很显然,给定一个测试集,我们可以得到如下的关系: N p r e = T P T N N_{pre}=TP TN Npre​=TP TN N t o t a l = T P T N F P F N N_{total}=TP TN FP FN Ntotal​=TP TN FP FN 如果我们定义一个测试集中,正样本个数为 P P P, 负样本个数为 N N N, 那么我们可以知道: P = T P F N P=TP FN P=TP FN, N = T N F P N=TN FP N=TN FP 所以,我们常用的识别率 a c c acc acc 其实就等于 A c c = T P T N T P T N F P F N = T P T N P N Acc=frac{TP TN}{TP TN FP FN}=frac{TP TN}{P N} Acc=TP TN FP FNTP TN​=P NTP TN​, 进一步,我们可以定义 recall ,precision, F1-score 如下所示: R e c a l l = T P T P F N = T P P Recall=frac{TP}{TP FN}= frac{TP}{P} Recall=TP FNTP​=PTP​ P r e c i s i o n = T P T P F P Precision=frac{TP}{TP FP} Precision=TP FPTP​ F 1 = 2 T P 2 T P F N F P = 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n R e c a l l F1=frac{2TP}{2TP FN FP}=frac{2 cdot Precision cdot Recall}{Precision Recall} F1=2TP FN FP2TP​=Precision Recall2⋅Precision⋅Recall​

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

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

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

F β = ( 1 β 2 ) T P ( 1 β 2 ) T P β 2 F N F P = ( 1 β 2 ) ⋅ P r e c i s i o n ⋅ R e c a l l β 2 ⋅ P r e c i s i o n R e c a l l F_{beta}=frac{(1 beta^{2})TP}{(1 beta^{2})TP beta^{2}FN FP}=frac{(1 beta^{2}) cdot Precision cdot Recall}{beta^{2} cdot Precision Recall} Fβ​=(1 β2)TP β2FN FP(1 β2)TP​=β2⋅Precision Recall(1 β2)⋅Precision⋅Recall​

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183272.html原文链接:https://javaforall.cn

0 人点赞