Lorsque j'ai essayé de calculer l'indice décrit dans un certain article avec scicit-learn, il y avait une méthode pour calculer la sensibilité et le rappel indépendamment, mais classification_report est généré à la fois pour la spécicité et la VAN. Cependant, comme il n'y avait pas de méthode pour calculer indépendamment, j'ai essayé de l'implémenter.
Regardez ici, haut. https://en.wikipedia.org/wiki/Sensitivity_and_specificity
La relation entre les termes ressemble à ceci. Pas besoin de mémoriser.
Calculez en utilisant la matrice de confusion.
from sklearn import metrics
def calc_metrics_derived_from_confusion_matrix(metrics_name, y_true, y_predict):
tn, fp, fn, tp = metrics.confusion_matrix(y_true, y_predict).ravel()
# PPV, precision
# TP / TP + FP
if metrics_name in ["PPV", "precision"]:
return tp / (tp + fp)
# NPV
# TN / TN + FN
if metrics_name in ["NPV"]:
return tn / (tn + fn)
# sensitivity, recall, TPR
# TP / TP + FN
if metrics_name in ["sensitivity", "recall", "TPR"]:
return tp / (tp + fn)
# specificity
# TN / TN + FP
if metrics_name in ["specificity"]:
return tn / (tn + fp)
Comme ça.
calc_metrics_derived_from_confusion_matrix("sensitivity",[0,0,1], [1,0,1])
calc_metrics_derived_from_confusion_matrix("PPV",[0,0,1], [1,0,1])
calc_metrics_derived_from_confusion_matrix("specificity",[0,0,1], [1,0,1])
calc_metrics_derived_from_confusion_matrix("NPV",[0,0,1], [1,0,1])
Recommended Posts