但如果我们更加仔细的观察模型对各样本输出的概率欧安别结果,其实我们会发现模型 A 其实会更加“优秀”:首先,对于判断正确的 1 类数据,模型A输出的概率预测分别为 0.8、0.9 和 0.9,表示模型非常肯定这些样本应该属于 1 类。
而模型 B 的概率预测结果为 0.6、0.7、0.6,表示模型并不是特别肯定这样样本属于 1 类,类似的情况也出现在两个模型正确识别 0 类的判别过程中。
此外,对于误判的样本,虽然两个模型都将原本属于 0 类的 2 号样本误判为 1,但模型 B 给出的概率结果是 0.9,代表其非常肯定该样本应该属于 1 类,而模型 A 输出的概率结果为 0.6,表示其并不是非常肯定该样本属于 1 类。
在实际建模过程中,类似 A 模型的模型,即对判断正确的样本有较高的肯定、对判断错误的样本不太肯定,这类模型其实是更加准确的捕捉到了数据规律,在后续对于新数据集预测时,也将拥有更强的泛化能力。
但遗憾的是,准确率评估指标并无法很好的将 A 类模型和 B 类模型的模型判别能力进行准确区分。
此时我们可以通过交叉熵来比较两个模型的好坏优劣。我们知道,交叉熵计算结果越小、模型本身判别能力越强,我们尝试借助交叉熵计算公式来计算两个模型输出结果的交叉熵:
B
C
E
A
=
−
l
o
g
2
(
0.8
)
−
l
o
g
2
(
0.4
)
−
l
o
g
2
(
−
0.8
)
−
l
o
g
2
(
0.9
)
−
l
o
g
2
(
0.9
)
5
BCE_A = \frac{-log_2(0.8)-log_2(0.4)-log_2(-0.8)-log_2(0.9)-log_2(0.9)}{5}
BCEA=5−log2(0.8)−log2(0.4)−log2(−0.8)−log2(0.9)−log2(0.9)
B
C
E
B
=
−
l
o
g
2
(
0.6
)
−
l
o
g
2
(
0.1
)
−
l
o
g
2
(
−
0.6
)
−
l
o
g
2
(
0.7
)
−
l
o
g
2
(
0.6
)
5
BCE_B = \frac{-log_2(0.6)-log_2(0.1)-log_2(-0.6)-log_2(0.7)-log_2(0.6)}{5}
BCEB=5−log2(0.6)−log2(0.1)−log2(−0.6)−log2(0.7)−log2(0.6)
和召回率不同,精确度并不主张“宁可错杀一千不可放过一个”,而是更加关注每一次出手(对 1 类样本的识别)能否成功(准确识别出 1)的概率,精确度计算公式为:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision = \frac{TP}{TP+FP}
Precision=TP+FPTP
所谓 A 和 B 的调和平均数,指的是
2
1
A
+
1
B
=
2
A
B
A
+
B
\frac{2}{\frac{1}{A}+\frac{1}{B}}=\frac{2AB}{A+B}
A1+B12=A+B2AB 的计算结果,则 F1-Score 计算公式如下:
F
1
−
S
c
o
r
e
=
2
1
R
e
c
a
l
l
+
1
P
r
e
c
i
s
i
o
n
=
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-Score = \frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}=\frac{2 \cdot Recall \cdot Precision}{Recall+Precision}
F1−Score=Recall1+Precision12=Recall+Precision2⋅Recall⋅Precision
当然,通常我们也会用 TPR 表示 Recall、PPV 表示 Precision,此时 F1-Score 可表示如下:
F
1
−
S
c
o
r
e
=
2
⋅
T
P
R
⋅
P
P
V
T
P
R
+
P
P
V
F1-Score = \frac{2\cdot TPR \cdot PPV}{TPR+PPV}
F1−Score=TPR+PPV2⋅TPR⋅PPV
如果更近一步用混淆矩阵的一级指标来进行表示,则:
F
1
−
S
c
o
r
e
=
2
⋅
T
P
2
⋅
T
P
+
F
P
+
F
N
F1-Score = \frac{2\cdot TP}{2\cdot TP+FP+FN}
F1−Score=2⋅TP+FP+FN2⋅TP
当然,除了 F1-Score 以外我们还可以取 Recall 和 Precision 的均值(balanced accuracy,简称BA)来作为模型评估指标:
B
A
=
R
e
c
a
l
l
+
P
r
e
c
i
s
i
o
n
2
BA = \frac{Recall+Precision}{2}
BA=2Recall+Precision
不过,相比平均数,调和平局数其实会更大程度上受到短板数据的影响。
从上述结果不难发现,从模型 B 到模型 C,F1-Score 的数值增长幅度和 Precision 涨幅类似,这其实就是由 F1-Score 的调和平均数的性质决定的。
除了 F1-Score 以外,还有一种更为一般的、可以自主调整召回率和精确度在参与调和平均数计算过程中的权重的评估指标,
F
β
F_\beta
Fβ,其计算公式如下:
F
β
=
(
1
+
β
2
)
p
r
e
c
i
s
i
o
n
⋅
r
e
c
a
l
l
(
β
2
⋅
p
r
e
c
i
s
i
o
n
)
+
r
e
c
a
l
l
F_\beta=(1+\beta ^2)\frac{precision \cdot recall}{(\beta ^2 \cdot precision)+recall}
Fβ=(1+β2)(β2⋅precision)+recallprecision⋅recall
首先是用来衡量 0 类被正确识别比例的特异度,该指标类似召回率,都是较为激进的评估指标,只考虑关注的类(0 类或者 1 类)被识别出来的比例,而不考虑在识别过程中是否牺牲了另外一类的准确率。该指标计算公式如下:
S
p
e
c
i
f
i
c
i
t
y
=
T
N
T
N
+
F
P
Specificity = \frac{TN}{TN+FP}
Specificity=TN+FPTN
同样,对于上述例子来看,特异度计算结果为 3/4=0.75
此外,特异度往往也被称为 true negative rate (TNR)。
阴性预测值(negative predictive value)
同样,类似 Precision,对于 0 类样本的衡量,也有一个相对保守评估指标,用于衡量对 0 类样本进行判别的所有判别结果中正确识别的 0 类样本所占得比例,也就是阴性预测值指标,往往也被称为NPV(negative predictive value)。其计算公式如下:
N
P
V
=
T
N
T
N
+
F
N
NPV = \frac{TN}{TN+FN}
NPV=TN+FNTN
除了上述指标外,我们还需要补充一个对后续会经常用到的一个评估指标:伪阳率(false positive rate),其计算公式为:
F
P
R
=
1
−
s
p
e
c
i
f
i
c
i
t
y
=
F
P
F
P
+
T
N
FPR = 1-specificity=\frac{FP}{FP+TN}
FPR=1−specificity=FP+TNFP
例如,A、B、C 三类的 Recall 为:
R
e
c
a
l
l
A
=
6
6
+
2
+
2
=
0.6
Recall_A = \frac{6}{6+2+2} = 0.6
RecallA=6+2+26=0.6
R
e
c
a
l
l
B
=
3
3
+
1
+
3
=
3
7
=
0.42
Recall_B = \frac{3}{3+1+3} = \frac{3}{7} = 0.42
RecallB=3+1+33=73=0.42
R
e
c
a
l
l
C
=
2
2
+
2
+
6
=
0.2
Recall_C = \frac{2}{2+2+6} = 0.2
RecallC=2+2+62=0.2
然后,进行均值计算,即可算得此时模型整体 Recall:
R
e
c
a
l
l
=
0.6
+
0.42
+
0.2
3
=
0.4
Recall = \frac{0.6+0.42+0.2}{3} = 0.4
Recall=30.6+0.42+0.2=0.4
类似,可以算得
P
r
e
c
i
s
i
o
n
A
=
6
13
=
0.46
Precision_A = \frac{6}{13} = 0.46
PrecisionA=136=0.46,
P
r
e
c
i
s
i
o
n
B
=
3
7
=
0.42
Precision_B = \frac{3}{7} = 0.42
PrecisionB=73=0.42,
P
r
e
c
i
s
i
o
n
C
=
2
7
=
0.28
Precision_C = \frac{2}{7} = 0.28
PrecisionC=72=0.28,随后利用三者均值求出模型整体
P
r
e
c
i
s
i
o
n
=
0.38
Precision=0.38
Precision=0.38。
当然,我们也可以计算模型整体 F1-Score,此时仍然需要分别计算 A、B 和 C 三个模型的 F1-Score,然后利用均值进行集成即可。