zl程序教程

您现在的位置是:首页 >  其他

当前栏目

算法工程师面试之评测指标

工程师算法面试 指标 评测
2023-09-14 09:13:20 时间

前言


来,现在在脑子里回忆一下,深度学习中有哪些性能评测指标?这节就专门来分析一下评测指标。

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+precision2recallprecision
但是有时候我们会遇到类别不均衡的问题,所以就延伸出两种具体的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=1Nfi=N1i=1N2ri+piripi
其中 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