发现在多分类问题(这里『多分类』是相对于『二分类』而言的,指的是类别数超过2的分类问题)中,用sklearn
的metrics.accuracy_score(y_true, y_pred)
和float(metrics.f1_score(y_true, y_pred, average="micro"))
计算出来的数值永远是一样的,在stackoverflow中搜索这个问题Is F1 micro the same as Accuracy?
也搜到micro F1 score与accuracy数值是相等的,遂证明如下:
定义TP/FP/FN
为多分类问题各类的tp/fp/fn之和,三者之间的关系有如下引理(其中ALL
是总样本数)。
引理:
FP = FN = F
F + TP = ALL
引理的证明:FP
与FN
恒等性的简单证明:
考虑多分类问题的混淆矩阵,FP
和FN
的值都是混淆矩阵所有非对角线的值求和,只不过FP
计算时是先对列求和再对行求和,FN
计算时是先对行求和再对列求和。由于FP
与FN
恒等,故可以统一记作F
. 而TP
是混淆矩阵的对角线和。引理证毕。
下面计算micro PrecisionP
, micro RecallR
, micro F1 score F1
:
P = TP / (TP + FP)
R = TP / (TP + FN)
F1 = 2 * P * R / (P + R)
= 2 * TP / (2 * TP + FP + FN)
= 2 * TP / (2 * TP + 2 * F)
= TP / (TP + F)
= TP / ALL
= acc
其中acc
是多分类的accuracy. 证毕。