之前写一个作业样本不均衡问题。然后查了很多文章都说要更换评价指标,不能再使用准确率了,要计算F值。我看了一下F值怎么计算,看了挺多文章的,但是感觉说的比较迷惑,或者说法比较拗口。最后还是自己再总结一个。
查准率、查全率、F值
我们平时对于一个模型预测的准不准,我们最先想到的是用准确率进行评价。
$$
accuracy = \frac{true}{total}
$$
这个虽然常用,但不能满足所有任务的需求。
所以我们可以引入查准率和查全率。
-
查准率(Precision):某一分类你预测对了多少个。
$P = \frac{预测对的某一类}{你预测的某一类}$
-
查全率(Recall):某一分类你预测出来多少个。
$R = \frac{预测对的某一类}{样本中的某一类}$
举个例子:
计算○的:
$P_○ = \frac{2}{3}$
$R_○ = \frac{3}{2}$
查准率和查全率二者不可得兼。大概是下图这样的图像。不信你可以自己算一下。对于不同的实验曲线的形状可能略有不同。
而F值是二者的综合:
$$
F(k) =\frac{ ( 1 + k ) \times P \times R} { k^2 \times P + R },\quad 其中k>0
$$
其中$k$可以看做一个权值对待:
- $k>1$就是查全率有更大影响,
- $k<1$查准率有更大影响。
而我们常用的是$F1$值,$F(1)$的意思,$k=1$,此时
$$
F(1) = \frac {2 \times P \times R} { P + R }
$$
对于上边的例子F1值就是:$F1_○ = \frac{2\times \frac{2}{3} \times \frac{3}{2}}{ \frac{2}{3} + \frac{3}{2}}$
对于二分类问题
为了跟大家一样显得我正规一点,所以我也写了下面这一段。但是我的建议是不用往下看二分类这一段了。因为我一看什么TP、FN这些字母我就头大。就是看了之后容易让人更迷惑。并且跟上面的多分类还衔接不上。道理就是我上边说的那一段,所以直接跳过二分类,看多分类就可以了。
二分类呢就是我上面举的那个例子。别人写F值的计算一般都喜欢用一个混淆矩阵来表示。
我们需要建立以下几个量的混淆矩阵:
- 真正例(True Positive,TP):真实类别为正例,预测类别为正例。
- 假正例(False Positive,FP):真实类别为负例,预测类别为正例。
- 假负例(False Negative,FN):真实类别为正例,预测类别为负例。
- 真负例(True Negative,TN):真实类别为负例,预测类别为负例。
还是上面那个例子,我们讲说圆圈是正例,方块是负例。现在就可以转化成下图这样。
此时:
-
准确率: $A = \frac{T P+T N}{\text { TP+FP+FN+TN }}$
- 精确率:$P=\frac{T P}{T P+F P}$
- 召回率:$R=\frac{T P}{T P+F N}$
- F1值: $F 1=\frac{2 \times P \times R}{P+R}$
多分类
为什么我说可以不看二分类那一段,因为那一段真的四个字母表示特别容易让人迷惑。并且它跟多分类也衔接不上。因为在多分类里你没有办法用简单的正例负例来说了。
不需要你再翻回去了,我直接把那个内容搬下来了。
-
查准率(Precision):某一分类你预测对了多少个。
$P = \frac{预测对的某一类}{你预测的某一类}$
-
查全率(Recall):某一分类你预测出来多少个。
$R = \frac{预测对的某一类}{样本中的某一类}$
在这里就涉及到了宏F值(F-macro)和微F值(F-micro)。
-
宏F值:求取每一类的F值之后求平均值。
$F{Macro} = \frac{1}{n}\sum{i-1}^n F1^{(i)}$
-
微F值:这样每一类的预测结果都加起来之后再计算查准率、查全率、F值。
$F_{Micro} = \frac {k \times P \times R} { k^2 \times P + R }$