multi-label问题的不同metrics评估指标对比
【草稿】
其中阴影方框代表分子,白色空白方框+阴影方框代表分母


其中Jaccard和F1比较容易出错。
分析sklearn的jaccard_score如下:
''' jaccard 测试''' from sklearn.metrics import jaccard_score, f1_score, hamming_loss, accuracy_score import numpy as np y_true = np.array([[0, 1, 0, 1, 0],[0, 0, 1, 0, 0],[1, 0, 0, 0 ,1],]) y_pred = np.array([[1, 0, 0, 0, 0],[0, 0, 1, 0 ,0],[1, 0, 0, 1, 1],]) j_macro = jaccard_score(y_true, y_pred, average='macro') j_sample = jaccard_score(y_true, y_pred, average='samples') j_micro = jaccard_score(y_true, y_pred, average='micro') ##### jaccard 算法 ###### xx= np.minimum(y_true, y_pred) intersection = np.sum(np.minimum(y_true, y_pred), axis=0) union = np.sum(np.maximum(y_true, y_pred), axis=0) jaccard_per_class = intersection / union macro_jaccard_score = np.mean(jaccard_per_class) macro_jaccard_score print('sklearn-jaccard-macro',j_macro) print('jaccard algorithm',macro_jaccard_score) # (1/2+0+1+0+1)/5=0.5 print('sklearn-jaccard-samples',j_sample) # (0+1+2/3)/3=5/9=0.55555 print('sklearn-jaccard-micro',j_micro) # 3/7=0.428571428
约登指数(Youden Index) 之前没怎么见过,可参考 [AI医学] 临床指标敏感性/特异性/PPV/NPV原理与计算方法 - 知乎 (zhihu.com)
在类别不平衡时,informative:
MCC > Kappa > F1 > (balanced) Acc

总结:
| 指标 | 计算公式 | 解释 |
|---|---|---|
| 准确率ACC(Accuracy) | (TP+TN)/(TP+FP+FN+TN) | 在总样本中,预测正确的样本所占的比例 |
| 精确率P(Precision) | TP/(TP+FP) | 在预测为正例的样本中,确实为正例的占比 |
| 召回率R(Recall) | TP/(TP+FN) | 在正例样本中,预测正确的量所占的比例 |
| F1值 | 2*P*R/(P+R) | 精准率与召回率的综合指标,精准率的倒数+召回率的倒数 |
| 敏感性(Sensitivity) | TP/(TP+FN) | 阳性「召回率」,阳性患者被识别阳性的比例,未召回表示患者漏诊 |
| 特异性(Specificity) | TN/(TN+FP) | 阴性「召回率」,阴性患者被识别阴性的比例,未召回表示误诊 |
| 约登指数(Youden index) | 敏感性 + 特异性 -1 | 敏感性与特异性的综合指标 |
| 阳性预测值(PPV) | TP/(TP+FP) | 等同于「精准率」,检测为阳性的人群中真正为阳性的占比,判定错误则为假阳 |
| 阴性预测值(NPV) | TN/(TN+FN) | 检测为阴性的人群中确实为阴性的占比,判定错误则为假阴 |
| 真正例率(TPR) | TP/(TP+FN) | 等同于「敏感性」,正例的召回率 |
| 假正例率(FPR) | FP/(TN+FP) | 1-特异性,表示误诊率 |
| AUC | -- | ROC曲线下的面积,ROC曲线为不同阈值下TPR与FPR所构成的曲线,AUC 不受正负样本比例的影响,它反映的不同阈值下的模型的整体性能 |

浙公网安备 33010602011771号