index | labels | A-predicts | B-predicts | predicts_results |
---|---|---|---|---|
1 | 1 | 0.8 | 0.6 | 1 |
2 | 0 | 0.6 | 0.9 | 1 |
3 | 0 | 0.2 | 0.4 | 0 |
4 | 1 | 0.9 | 0.7 | 1 |
5 | 1 | 0.9 | 0.6 | 1 |
如果是从准确率指标来看,两个模型在阈值为0.5的情况下,判别准确率都是80%(仅判错第二条样本),二者并无高下之分。但如果我们更加仔细的观察模型对各样本输出的概率欧安别结果,其实我们会发现模型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)
labels(Actual condition) | predicted(Predicated condition) |
---|---|
1 | 0 |
1 | 0 |
1 | 1 |
1 | 1 |
1 | 1 |
1 | 1 |
1 | 1 |
1 | 1 |
0 | 0 |
0 | 0 |
0 | 0 |
0 | 1 |
对于上述数据集而言,P=8,N=4,PP=7,PN=5。并且,样本总数=P+N=PP+NN=12。
此外,在进行二分类模型预测过程中,样本类别被模型正确识别的情况其实有两种,一种是阳性样本被正确识别,另一种是阴性样本被正确识别,据此我们可以有如下定义:
对于上述数据集而言,TP=6,TN=3。
对于上述数据集而言,FP=1,FN=2。
不难发现,混淆矩阵其实具有非常强的统计表的背景,并且和此前介绍的一样、也是更倾向于重点识别1类(阳性)样本。
对于上述数据集,混淆矩阵计算结果为:
当然,对于混淆矩阵来说,其实仍然属于第一级观察指标,通过混淆矩阵,通常我们并不会直接使用混淆矩阵中的一级指标,而是去使用基于这些一级指标的二级指标。例如从上述混淆矩阵所提供的结果不难看出,准确率其实就是 A C C = T P + T N T P + T N + F P + F N ACC=\frac{TP+TN}{TP+TN+FP+FN} ACC=TP+TN+FP+FNTP+TN。当然此外其实还有其他很多常用的二级指标,通过这些二级指标的构建,可以补充准确率在偏态样本中重点识别某类样本时表现的不足。首先,如果是更加关注类别1样本的识别情况,则有两个常用指标:
对于上例中,全部12条样本中有8条1类样本,而其中有6条被正确识别,因此上例的召回率为6/8=75%。
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP
对于上例中,全部12条样本,模型总共判别7条样本为1类样本,但其中有6条判别准确,精确度为6/7=86%。
不难发现,召回率和精确度其实是一对相对的概念,在围绕1类样本的识别过程中,召回率力求尽可能更多的将1识别出来,而精确度则力求每次对1样本的判别都能获得一个正确的结果。但是,再大多数情况下,其实我们是希望获得一个更加“均衡”的模型判别指标,即我们既不希望模型太过于激进、也不希望模型太过于保守,并且对于偏态样本,既可以较好的衡量1类样本是否被识别,同时也能够兼顾考虑到0类样本的准确率牺牲程度,此时,我们可以考虑使用二者的调和平均数(harmonic mean)作为模型评估指标,即F1-Score。
所谓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的计算公式不难发现,F1-Score是一个介于[0,1]之间的计算结果,当FP+FN=0时候(即没有误判样本时),F1-Score计算结果为1;而当没有正确识别出一个1时,即TP=0时,F1-Score=0。
对于下述混淆矩阵来说,F1-Score计算结果为 12 12 + 2 + 1 = 0.8 \frac{12}{12+2+1}=0.8 12+2+112=0.8
此时,如果要进行Recall、Precision的计算,则需要先采用此前介绍的OVR策略进行“划分”、然后采用均值策略进行“集成”,依次将A、B、C视为1类,其余类别视为0类来进行计算,例如,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,然后利用均值进行集成即可。