算法工程师面试之评测指标
前言
- 文章来源:CSDN@LawsonAbs
- 代码详见我的Github
来,现在在脑子里回忆一下,深度学习中有哪些性能评测指标?这节就专门来分析一下评测指标。
1. F1值
F1值的计算很简单,公式是:
f
1
=
2
∗
r
e
c
a
l
l
∗
p
r
e
c
i
s
i
o
n
r
e
c
a
l
l
+
p
r
e
c
i
s
i
o
n
f1 = \frac{2*recall*precision}{recall+precision}
f1=recall+precision2∗recall∗precision
但是有时候我们会遇到类别不均衡的问题,所以就延伸出两种具体的F1值。一种是macro_f1,一种是micro_f1。所谓macro_f1 就是对权重均衡的类别F1。假设现在有N类,那么macro_f1 的计算方式就是
m
a
c
r
o
_
f
1
=
1
N
∑
i
=
1
N
f
i
=
1
N
∑
i
=
1
N
2
∗
r
i
∗
p
i
r
i
+
p
i
\begin{aligned} macro\_f1 &= \frac{1}{N}\sum_{i=1}^{N}f_i &=\frac{1}{N}\sum_{i=1}^{N} 2 * \frac{r_i * p_i}{r_i+p_i} \end{aligned}
macro_f1=N1i=1∑Nfi=N1i=1∑N2∗ri+piri∗pi
其中
r
i
r_i
ri 和
p
i
p_i
pi 表示的是第i个类别的recall以及precision 值。
比如给出了一个真实标签以及预测值,怎么计算呢?sklearn 中的 f1_score
已经完全实现了这些功能,所以在需要实现相关功能的时候,请查阅资料,避免重复造轮子。
"""
使用macro,micro, weighted 等参数计算不同的f1_score值
"""
from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
# macro计算的是加权平均
print(f1_score(y_true, y_pred, average='macro'))
# micro 计算的是总体样本的平均
print(f1_score(y_true, y_pred, average='micro'))
得到的结果如下:
我们可以手动计算一下并与sklearn 计算的值比较一下:
根据y_true 的值,我们知道有三类,其中
r
1
=
1
r_1 = 1
r1=1,
f
1
=
2
3
f_1 = \frac{2}{3}
f1=32 ,
r
2
=
0
r_2 = 0
r2=0,
p
2
=
0
p_2 = 0
p2=0,
r
3
=
0
r_3 = 0
r3=0,
p
3
=
0
p_3 = 0
p3=0。 于是
m
a
c
r
o
f
1
=
4
/
15
=
0.26666
macro_{f1} = 4/15 = 0.26666
macrof1=4/15=0.26666。 同样计算出
m
i
c
r
o
f
1
=
2
/
6
=
0.33333
micro_{f1} = 2/6 = 0.33333
microf1=2/6=0.33333
相关文章
- 【软考】系统集成项目管理工程师(一)信息化知识[通俗易懂]
- 毕业月薪3万起!算法工程师九成硕博学历,腾讯成AI人才收割机
- 毕业月薪3万起!算法工程师九成硕博学历,腾讯成AI人才收割机
- java高级工程师_一名Java高级工程师需要学什么?
- 前端工程师leetcode算法面试必备-二叉树的构造和遍历
- 快手推荐算法工程师工作感悟
- 前端工程师leetcode算法面试必备-二分搜索算法(上)
- 基础算法才是王道!谷歌2022年终总结第五弹:真正的「算法工程师」都在研究啥?
- 在网易有道做语音算法工程师是一种怎样的体验?
- 我们正在进入大模型认知智能时代,算法工程师将被取代
- Linux测试工程师:探寻技术之旅(linux测试工程师)
- Linux网络工程师:追求无极限的技术完美(linux网络工程师)
- 招聘嵌入式Linux软件工程师,前程无忧!(嵌入式linux软件工程师)
- 一名优秀的射频测试工程师需要掌握这五大技能