[PYTHON] À propos de l'option moyenne de sklearn.metrics.f1_score

Qu'est-ce que le score F1?

f1 = \frac{2 \times Recall \times Precision}{Recall + Precision} = \frac{1}{\frac{1}{Recall} \times \frac{1}{Precison}} = \frac{2 \times TP}{2 \times TP + FP + FN}

C'est un indice de l'équilibre entre Rappel (taux de rappel, sensibilité) et Précision (conformité, précision) indiqué par. Puisqu'il s'agit d'une moyenne harmonisée, le score sera faible si l'un ou l'autre est extrêmement faible.

Classification multi-classes

Pour simplifier, classer en 3 classes (4 classes ou plus peuvent être considérées de la même manière)

Classe attendue
a b c
a 10 3 5
Classe de réponse correcte b 4 20 3
c 4 3 15

Lorsqu'il existe une matrice de confusion comme celle-ci, TP, FP et FN sont définis comme suit.

classe TP FP FN
a 10 8 8
b 20 6 7
c 15 8 7

FP est la somme des éléments verticaux et FN est la somme des éléments horizontaux.

sklearn.metrics.f1_score [https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html] Si vous regardez (), vous pouvez voir les options " binaire ", "micro" , "macro" `, «« pondéré »,« échantillons »« existe. (Idem pour rappel_score et precision_score) «« binaire »» est utilisé dans la classification binaire. D'autres sont décrits ci-dessous.

"micro"

  1. Calculez TP, FP, FN dans leur ensemble.

    TP FP FN
    45 22 22
  2. Calculez avec le TP obtenu, FP.FN $f1 = \frac{2 \times TP}{2 \times TP + FP + FN} = \frac{90}{90+22+22} = 0.67164179104\dots$

"macro"

  1. Calculer le rappel et la précision pour chaque classe

    classe Recall Precision
    a \frac{10}{18} \frac{10}{18}
    b \frac{20}{27} \frac{20}{26}
    c \frac{15}{22} \frac{15}{23}
  2. Calculez le rappel et la précision moyens

    Recall Precision
    \frac{1}{3}\sum{Recall} \frac{1}{3}\sum{Precision}
  3. Calculez f1 avec la moyenne calculée

    \frac{1}{\frac{1}{\frac{1}{3}\sum{Recall}} \times \frac{1}{\frac{1}{3}\sum{Precision}}}

"weighted"

  1. Multipliez le nombre de données dans chaque classe par le rappel individuel, la précision

    classe Recall Precision
    a \frac{10}{18} \times 18 \frac{10}{18}\times 18
    b \frac{20}{27}\times 18 \frac{20}{26}\times 18
    c \frac{15}{22}\times 18 \frac{15}{23}\times 18
  2. Divisez la somme de Rappel et Précision par le nombre total de données

    Recall Precision
    \frac{1}{67}\sum{Recall} \frac{1}{67}\sum{Precision}
  3. Calculez f1 avec la moyenne calculée

    \frac{1}{\frac{1}{\frac{1}{67}\sum{Recall}} \times \frac{1}{\frac{1}{67}\sum{Precision}}}

"samples" Je ne suis pas sûr, donc je l'ajouterai dès que je comprendrai.

Recommended Posts

À propos de l'option moyenne de sklearn.metrics.f1_score
À propos du test
À propos de la file d'attente
À propos de la différence entre "==" et "is" en python
[Note] À propos du rôle du trait de soulignement "_" en Python
Trier en Python. Pensons ensuite à l'algorithme.
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
À propos de l'inefficacité du transfert de données dans luigi on-memory
À propos de la fonction Déplier
À propos de la commande de service
À propos de l'ordre épuré dans l'ordre d'importation flake8
À propos de l'option --enable-shared lors de la construction de Python sous Linux
À propos de la matrice de confusion
À propos du modèle de visiteur
À propos de __all__ en python
Un mémorandum sur la mise en œuvre des recommandations en Python
À propos du numéro (numéro de section) entre () affiché par la commande man Linux
Trouvez l'écart moyen / standard des valeurs de luminosité dans l'image
Trouver des erreurs en Python
À propos du module Python venv
À propos de la fonction enumerate (python)
À propos du problème du voyageur de commerce
Méthodes disponibles dans la liste
À propos de la compréhension du lecteur en 3 points [...]
À propos des composants de Luigi
À propos des fonctionnalités de Python
À propos de "for _ in range ():" de python
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
Réfléchissez aux raisons pour lesquelles Kubernetes est décrit comme «Linux dans le monde du cloud»