混淆矩阵、查准率P和召回率R
参加夏令营时候遇到过混淆矩阵、查准率和召回率的计算方法的问题,今天看书又回顾到这个概念,个人觉得对这个概念还是需要有非常清醒的认识的,做个记录。
二分类的混淆矩阵
假设正例为我有病,那反例就是我没病。
TP就是,我有病,判断有病。
FN就是,我有病,但是没判断出来,觉得我没病。
FP是,我没病,但是判断我有病。
TN是,我没病,判断的也是我没病,判断的是正确的。
真实情况\预测结果 | 正例 | 反例 |
---|---|---|
正例 | TP | FN |
反例 | FP | TN |
查准率P和召回率R
P
=
T
P
T
P
+
F
P
P=\frac{TP}{TP+FP}
P=TP+FPTP
R
=
T
P
T
P
+
F
N
R=\frac{TP}{TP+FN}
R=TP+FNTP
这样说来,P就是我有病且判断对了,这在判断的结果都是有病的概率,那么1-P叫虚惊一场。
但是R就是,我有病且判断对了,占,实际情况我就是有病,的概率,那么1-R就是我有病但没看出来,耽误事了,这个值当然要越小越好,这种情况下R大是好事。这个知识点在机器翻译课上老师也强调过。
那么比如推荐系统中P高是目标,这样可以给用户提供更多有趣的信息;查找罪犯判断疾病中R高是目标,保证准确性,召回率很重要。
查准率P和召回率R是一组矛盾的度量。一般来说,查准率高时,召回率就会偏低,反之亦然。
12月1日补充:一个很棒的知乎例子
综合考量: F 1 F_{1} F1
F
1
=
2
⋅
P
⋅
R
P
+
R
=
2
⋅
T
P
m
+
T
P
−
T
N
F_{1}=\frac{2·P·R}{P+R}=\frac{2·TP}{m+TP-TN}
F1=P+R2⋅P⋅R=m+TP−TN2⋅TP
整理得
F
1
=
2
1
P
+
1
R
F_{1}=\frac{2}{\frac{1}{P}+\frac{1}{R}}
F1=P1+R12
度量可以看成是P和R的调和平均数,将
F
1
F_{1}
F1度量推广到一般形式
F
β
F_{\beta}
Fβ,能度量出P和R之间的不同偏好。
F
β
=
(
1
+
β
2
)
⋅
P
⋅
R
β
2
⋅
P
+
R
F_{{\beta}}=\frac{(1+\beta^2)·P·R}{\beta^2·P+R}
Fβ=β2⋅P+R(1+β2)⋅P⋅R
β
{\beta}
β(
β
{\beta}
β>0)能衡量P和R之间的相对重要程度,整理公式得
F
β
=
1
+
β
2
β
2
R
+
1
P
F_{{\beta}}=\frac{1+\beta^2}{\frac{\beta^2}{R}+\frac{1}{P}}
Fβ=Rβ2+P11+β2
F
β
F_{\beta}
Fβ可以看成是P和R的加权调和平均,
β
{\beta}
β=1,
F
β
F_{\beta}
Fβ退化成标准的
F
1
F_{1}
F1,即P和R同等重要;
β
{\beta}
β>1时,R有更大影响;
β
{\beta}
β<1时,P有更大影响。
多分类问题的混淆矩阵
处理实际问题中,往往是多分类的,多分类的P、R、 F 1 F_{1} F1、 F β F_{\beta} Fβ的计算方法要进行扩展。
真实情况\预测结果 | 1 | 2 | 3 |
---|---|---|---|
1 | a 1 a_{1} a1 | a 2 a_{2} a2 | a 3 a_{3} a3 |
2 | b 1 b_{1} b1 | b 2 b_{2} b2 | b 3 b_{3} b3 |
3 | c 1 c_{1} c1 | c 2 c_{2} c2 | c 3 c_{3} c3 |
给出分类为1的查准率和召回率的计算公式,对于分类为1的情况,
T
P
1
=
a
1
TP_{1}=a_{1}
TP1=a1
F
N
1
=
a
2
+
a
3
FN_{1}=a_{2}+a_{3}
FN1=a2+a3
F
P
1
=
b
1
+
c
1
FP_{1}=b_{1}+c_{1}
FP1=b1+c1
T
N
1
=
b
2
+
b
3
+
c
2
+
c
3
TN_{1}=b_{2}+b_{3}+c_{2}+c_{3}
TN1=b2+b3+c2+c3
此时,分类为1的查准率
P
1
P_{1}
P1和召回率
R
1
R_{1}
R1如下,
P
1
=
T
P
1
T
P
1
+
F
P
1
=
a
1
a
1
+
b
1
+
c
1
P_{1}=\frac{TP_{1}}{TP_{1}+FP_{1}}=\frac{a_{1}}{a_{1}+b_{1}+c_{1}}
P1=TP1+FP1TP1=a1+b1+c1a1
R
1
=
T
P
1
T
P
1
+
F
N
1
=
a
1
a
1
+
a
2
+
a
3
R_{1}=\frac{TP_{1}}{TP_{1}+FN_{1}}=\frac{a_{1}}{a_{1}+a_{2}+a_{3}}
R1=TP1+FN1TP1=a1+a2+a3a1
那么对分类2应该如何计算呢?练习一下,对于分类2的情况:
T
P
2
=
b
2
TP_{2}=b_{2}
TP2=b2
F
N
2
=
b
1
+
b
3
FN_{2}=b_{1}+b_{3}
FN2=b1+b3
F
P
2
=
a
2
+
c
2
FP_{2}=a_{2}+c_{2}
FP2=a2+c2
T
N
2
=
a
1
+
a
3
+
c
1
+
c
3
TN_{2}=a_{1}+a_{3}+c_{1}+c_{3}
TN2=a1+a3+c1+c3
此时,分类为1的查准率
P
2
P_{2}
P2和召回率
R
2
R_{2}
R2如下,
P
2
=
T
P
2
T
P
2
+
F
P
2
=
b
2
a
2
+
b
2
+
c
2
P_{2}=\frac{TP_{2}}{TP_{2}+FP_{2}}=\frac{b_{2}}{a_{2}+b_{2}+c_{2}}
P2=TP2+FP2TP2=a2+b2+c2b2
R
2
=
T
P
2
T
P
2
+
F
N
2
=
b
2
b
1
+
b
2
+
b
3
R_{2}=\frac{TP_{2}}{TP_{2}+FN_{2}}=\frac{b_{2}}{b_{1}+b_{2}+b_{3}}
R2=TP2+FN2TP2=b1+b2+b3b2
简记为,分子一直是预测对了的那个,分母P:竖着。R:横着。
m
a
c
r
o
P
=
1
m
∑
i
=
0
m
P
i
macroP=\frac{1}{m}\sum_{i=0}^mP_{i}
macroP=m1i=0∑mPi
m
a
c
r
o
R
=
1
m
∑
i
=
0
m
R
i
macroR=\frac{1}{m}\sum_{i=0}^mR_{i}
macroR=m1i=0∑mRi
m
a
c
r
o
F
1
=
2
⋅
m
a
c
r
o
P
⋅
m
a
c
r
o
R
m
a
c
r
o
P
+
m
a
c
r
o
R
macroF_{1}=\frac{2·macroP·macroR}{macroP+macroR}
macroF1=macroP+macroR2⋅macroP⋅macroR
另一种算法就是,首先获得每个分类对应二分类混淆矩阵的 T P 1 TP_{1} TP1、 F N 1 FN_{1} FN1、 F P 1 FP_{1} FP1、 T N 1 TN_{1} TN1,然后求他们的平均值,扔进上面macro公式中。
MSRA实习生,同济的子豪兄,讲的很不错~十五秒钟就能听完这个知识点~
就先写这么多啦,在这个概念上反反复复已经花了很多时间了!
2021.11.6更,看paper看糊涂了,看了半天居然没区分EM和CM。。
Evaluation metric:评价指标
Confusion Matrix:混淆矩阵