Präzision und Trefferquote
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 22 von 58.
Zwei Fragen bewerten die Antworten des Tests auf Grippe. Wie viele der Grippealarme waren richtig? Wie viele der tatsächlichen Grippefälle hat er erkannt?
Präzision beantwortet die erste Frage: 42 von 45 Alarmen. Recall beantwortet die zweite: 42 von 47 Fällen.
from sklearn.metrics import precision_score, recall_score
print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}"):.3f zeigt immer 3 Nachkommastellen an, daher würde 0.9 als 0.900 ausgegeben. Dies gibt Folgendes aus:
0.933
0.894Wähle danach, welcher Fehler teurer ist. Ein übersehener Grippefall kann sich ausbreiten, daher braucht dieser Test eine hohe Trefferquote. Ein Spamfilter, der echte E-Mails im Spamordner verschwinden lässt, braucht eine hohe Präzision.
Aufgabe
MittelDer Filter eines Shops blendet Rezensionen aus, die gefälscht wirken. Der Starter erstellt aus einem Modell zwei Versionen, strict_pred und eager_pred, und liest ein, welcher Fehler schwerer wiegt: missed (eine gefälschte Rezension bleibt sichtbar) oder hidden (eine echte Rezension wird ausgeblendet).
- Gib die Präzision und den Recall jedes Filters mit 3 Dezimalstellen aus.
- Gib den Filter aus, der weniger Fehler dieser Art macht, wie unten gezeigt (für
missed:Fewer fakes missed: ...).
Für einen anderen Shop und hidden:
Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strictProbier es selbst
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score
# Welcher Fehler ist schlimmer: übersehen (eine gefälschte Bewertung bleibt sichtbar) oder verborgen (eine echte Bewertung wird ausgeblendet)?
worse = input()
# Eine Zeile pro Bewertung: 1 in fake bedeutet, dass die Bewertung auf Bestellung geschrieben wurde
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]
# Zwei Filter aus demselben Modell: strict blendet eine Bewertung bei einer Wahrscheinlichkeit von 0.7 für eine Fälschung aus, eager schon bei 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3
# 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