Der F1-Score
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 23 von 58.
Ein Modell kann Präzision oder Recall maximieren, indem es den jeweils anderen aufgibt. Der F1-Score kombiniert beide und bleibt niedrig, solange nicht beide hoch sind:
Mit P für Präzision und R für Recall gilt für F1: 2 * P * R / (P + R). Für ein Wettermodell:
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)) # einer pro Klasse, sortiert
print(classification_report(y_test, pred))Dies gibt Folgendes aus:
[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 8Der Bericht bewertet jede Klasse; support zählt ihre Testzeilen. Seine schwächste Zeile zeigt dir, was du zuerst verbessern solltest.
Aufgabe
MittelDie Kamera einer Recyclinganlage sortiert Gegenstände in Behälter für Glas, Metall, Papier und Kunststoff. Das Programm liest k ein, und der Starter trainiert die k-NN der Kamera, füllt pred und listet die bins auf.
- Gib den Klassifizierungsbericht aus.
- Finde den Behälter mit dem niedrigsten F1-Wert und gib ihn aus, gefolgt von seiner schwächeren Seite, Präzision oder Recall, wie unten (3 Dezimalstellen).
Nach dem Bericht für eine andere Anlage:
Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571Probier es selbst
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())
# Eine Zeile pro Gegenstand auf dem Förderband und für den Behälter, in den er gehört
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)
# Das Modell der Kamera
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# Die Behälter in der Reihenfolge der Bewertungen für die einzelnen Klassen
bins = model.classes_
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler