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 不受正负样本比例的影响,它反映的不同阈值下的模型的整体性能

 

posted @ 2023-05-03 11:14  xiaoxiao_sjtu  阅读(164)  评论(0)    收藏  举报