机器学习中的F1-score

机器学习中的F1-score一、什么是F1-scoreF1分数(F1-score)是分类问题的一个衡量指标。一些多分类问题的机器学习竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0。此外还有F2分数和F0.5分数。F1分数认为召回率和精确率同等重要,F2分数认为召回率的重要程度是精确率的2倍,而F0.5分数认为召回率的重要程度是精确率的一半。计算公式为:G…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、什么是F1-score

F1分数(F1-score)是分类问题的一个衡量指标。一些多分类问题的机器学习竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0。

F_{1}=2\cdot \frac{precision\cdot recall}{precision+recall}

此外还有F2分数和F0.5分数。F1分数认为召回率和精确率同等重要,F2分数认为召回率的重要程度是精确率的2倍,而F0.5分数认为召回率的重要程度是精确率的一半。计算公式为:

F_{\beta }=\left (1+\beta ^{2} \right )\cdot \frac{precision\cdot recall}{\left (\beta ^{2}\cdot precision \right )+recall}

G分数是另一种统一精确率和的召回率系统性能评估标准,G分数被定义为召回率和精确率的几何平均数。

G=\sqrt{precision\cdot recall}


二、计算过程

1. 首先定义以下几个概念:

TP(True Positive):预测答案正确

FP(False Positive):错将其他类预测为本类

FN(False Negative):本类标签预测为其他类标

2. 通过第一步的统计值计算每个类别下的precision和recall

精准度 / 查准率(precision):指被分类器判定正例中的正样本的比重

precision_{k}=\frac{TP}{TP+FP}

召回率 / 查全率 (recall):指的是被预测为正例的占总的正例的比重

recall_{k}=\frac{TP}{TP+FN}

另外,介绍一下常用的准确率(accuracy)的概念,代表分类器对整个样本判断正确的比重。

accuracy=\frac{TP+TN}{TP+TN+FP+FN}

3. 通过第二步计算结果计算每个类别下的f1-score,计算方式如下:

f1_{k}=\frac{2\cdot precision_{k}\cdot recall_{k} }{precision_{k}+recall_{k}}

4. 通过对第三步求得的各个类别下的F1-score求均值,得到最后的评测结果,计算方式如下:

score=(\frac{1}{n}\sum f1_{k})^{2}


三、python实现

可通过加载sklearn包,方便的使用f1_score函数。

函数原型:

sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)

参数:

y_true : 1d array-like, or label indicator array / sparse matrix.

目标的真实类别。

y_pred : 1d array-like, or label indicator array / sparse matrix.

分类器预测得到的类别。

average : string,[None, ‘binary’(default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]

这里需要注意,如果是二分类问题则选择参数‘binary’;如果考虑类别的不平衡性,需要计算类别的加权平均,则使用‘weighted’;如果不考虑类别的不平衡性,计算宏平均,则使用‘macro’。

示例程序:

from sklearn.metrics import f1_score

y_pred = [0, 1, 1, 1, 2, 2]
y_true = [0, 1, 0, 2, 1, 1]

print(f1_score(y_true, y_pred, average='macro'))  
print(f1_score(y_true, y_pred, average='weighted'))  

分析上述代码,

对于类0:TP=1,FP=0,FN=1,precision=1,recall=1/2,F1-score=2/3,Weights=1/3

对于类1:TP=1,FP=2,FN=2,precision=1/3,recall=1/3,F1-score=1/3,Weights=1/2

对于类2:TP=0,FP=2,FN=1,precision=0,recall=0,F1-score=0,Weights=1/6

宏平均分数为:0.333;加权平均分数为:0.389

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181837.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OSChina 周一乱弹 —— 先扒龙王庙 再用大炮轰你

    OSChina 周一乱弹 —— 先扒龙王庙 再用大炮轰你

    2021年6月5日
    116
  • 微信公众平台 获取用户openid

    微信公众平台 获取用户openid今天做微信公众号获取用户的openid,圆满成功,特此来一发。 第一步:理解逻辑。 1:获取openid的逻辑获得微信的openid,需要先访问微信提供的一个网址:这个网址名为url1,下面有赋值。通过这个网址,微信用来识别appid信息,在这个网址中,有一个属性redirect_uri,是微识别完appid后,进行跳转的操作,可以是网页,也可以是servlet,我这里用的是…

    2022年6月26日
    87
  • ArrayList扩容详解

    ArrayList扩容详解本文探讨一下ArrayList的扩容过程ArrayList底层是数组elementData,用于存放插入的数据。初始大小是0,当有数据插入时,默认大小DEFAULT_CAPACITY=10。如果在创建ArrayList时指定了initialCapacity,则初始大小是ArrayList1.验证扩容的代码示例从示例中可以看到,当添加元素时,如果元素个数+1>当前数组长度【size+1>elementData.length】时,进行扩容,扩容后的数组大小是:oldC.

    2022年6月13日
    32
  • 这10个Redis使用技巧,提升90%工作效率(建议收藏)

    前言 Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路。随之而来的一系列最佳实践…

    2021年6月23日
    68
  • 如何确定pip安装成功,如何确定pygame安装成功

    如何确定pip安装成功,如何确定pygame安装成功一、如何确定pip安装成功?方法:在终端窗口中,输入piplist,能看到版本信息。(前提是要先将pip加入到环境变量中)二、如何确定pygame安装成功?方法,在终端窗口中,输入python-mpygame.examples.aliens,如果安装成功,会弹出一个游戏画面。示例游戏画面:…

    2022年5月23日
    54
  • Python元组_python元组的定义方式

    Python元组_python元组的定义方式元组元组的特点:是一种不可变序列,一旦创建就不能修改拆包将元组的元素取出赋值给不同变量>>>a=('hello','world',1

    2022年7月28日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号