Menu
CoddyTech

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:

Balken für zwei Modelle. Ungleichgewichtet: Präzision 1, Recall 0.1, einfacher Durchschnitt 0.55, F1 nur 0.18. Ausgewogen: Präzision 0.8, Recall 0.7, einfacher Durchschnitt 0.75, F1 0.75

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         8

Der Bericht bewertet jede Klasse; support zählt ihre Testzeilen. Seine schwächste Zeile zeigt dir, was du zuerst verbessern solltest.

challenge icon

Aufgabe

Mittel

Die 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.

  1. Gib den Klassifizierungsbericht aus.
  2. 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.571

Probier 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler