Le score F1
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 23 sur 58.
Un modèle peut maximiser la précision ou le rappel en sacrifiant l’autre. Le score F1 combine les deux et reste faible tant que les deux ne sont pas élevés :
Avec P pour la précision et R pour le rappel, F1 vaut 2 * P * R / (P + R). Pour un modèle météorologique :
from sklearn.metrics import f1_score, classification_report
y_test = ["sun", "sun", "rain", "rain", "snow", "sun", "rain", "snow"]
pred = ["sun", "rain", "rain", "rain", "snow", "sun", "sun", "rain"]
print(f1_score(y_test, pred, average=None)) # un par classe, triés
print(classification_report(y_test, pred))Cela affiche :
[0.57142857 0.66666667 0.66666667]
precision recall f1-score support
rain 0.50 0.67 0.57 3
snow 1.00 0.50 0.67 2
sun 0.67 0.67 0.67 3
accuracy 0.62 8
macro avg 0.72 0.61 0.63 8
weighted avg 0.69 0.62 0.63 8Le rapport attribue un score à chaque classe ; support compte ses lignes de test. Sa ligne la plus faible vous indique ce qu’il faut corriger en premier.
Défi
MoyenLa caméra d’une usine de recyclage trie les objets dans des bacs à verre, à métal, à papier et à plastique. Le programme lit k, et le code de départ entraîne le modèle k-NN de la caméra, remplit pred et répertorie les bins.
- Affiche le rapport de classification.
- Trouve le bac avec le score F1 le plus faible et affiche-le, puis affiche son indicateur le plus faible, la précision ou le rappel, comme ci-dessous (3 décimales).
Après le rapport, pour une autre usine :
Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571Essayez vous-même
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, f1_score, precision_score, recall_score
k = int(input())
# Une ligne par objet sur le tapis roulant, avec le bac auquel il appartient
items = pd.read_csv("recycling.csv")
features = ["weight_g", "shine", "see_through", "bend"]
X_train, X_test, y_train, y_test = train_test_split(items[features], items["material"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# Le modèle de la caméra
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# Les bacs, dans l’ordre des scores par classe
bins = model.classes_
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage supervisé
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne