随手记——几个深度学习常见metrics
kappa
公式
kappa=1−pepo−pe
其中
po=所有样本数分类正确的样本数=(混淆矩阵中的)所有元素之和对角线元素之和
=(混淆矩阵中的)(所有元素之和)2∑第i行元素和×第i列元素和
例子
y_true = [2, 0, 1, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
根据以上y_true和y_pred构建的混淆矩阵如下
| 0(y_true) | 1(y_true) | 2(y_true) |
|---|
| 0(y_pred) | 2 | 0 | 1 |
| 1(y_pred) | 0 | 0 | 0 |
| 2(y_pred) | 0 | 2 | 1 |
接着计算
po=(2+1)/6=21,pe=(3×2+0×2+3×2)/(6×6)=31
最终
kappa=1−3121−31=0.25
代码验证
from sklearn.metrics import cohen_kappa_score
kappa_value = cohen_kappa_score(y_true, y_pred)
输出结果 0.250000
设计目的
为了解决类别不平衡问题,kappa依靠pe在类别越不平衡就越大的特点,使得类别不平衡时kappa分数会更低。
F1-score
回忆基础概念,二分类混淆矩阵中,有这些定义:
- TP: true positive, 实际为true,预测为positive
- TN: true negative, 实际为true,预测为negative
- FP: false positive, 实际为false,预测为positive
- FN: false negative, 实际为false,预测为negative
在这些的基础上,定义了三个指标:
- Accuracy: 准确率, TP+TN+FP+FNTP+TN, 预测分类准确的比例
- Precision: 精确率, TP+FPTP, 预测为positive中正确的比例
- Recall: 召回率, TP+TNTP, 实际为true中被预测出来的比例
为了综合Precision和Recall,求取两者的调和平均数,因为无法直接得知TP+FP和TP+TN的数量,直接用加权平均无法确定合理的权重
F1=precision+revall2∗precision∗recall
Dice
非常奇妙的是,F1-score也被称作Dice similarity coefficient,也就是说他的含义和医学影像分割中常用的Dice是一毛一样的。
Dice一般定义如下:
DiceCoefficient =∣X∣+∣Y∣2∣X∩Y∣
咱们可以“惊讶”地发现,如果把pred(X)和ground-truth(Y)理解为用[0,1]标注的分类(其实这正是语义分割的原始定义,pixel-wise的分类问题 ),可见Dice确实和F1-score是一样的。