Modelle fair vergleichen
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 38 von 58.
Modelle anhand eines einzigen Splits zu vergleichen, ist ein Glücksspiel: Ein Modell kann einen besonders günstigen Testsatz erwischen. Verwende stattdessen für jedes Modell dieselben fünf Folds. Für 150 Banknoten, echt oder gefälscht:
k-NN und logistische Regression liegen innerhalb ihrer Schwankungsbreite gleichauf, und k-NN ist stabiler. Der Entscheidungsbaum liegt zurück.
Ein KFold-Splitter mischt die Zeilen einmal und übergibt jedem Modell identische Folds:
from sklearn.model_selection import KFold
folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
scores = cross_val_score(model, X, y, cv=folds)
print(f"{scores.mean():.3f} {scores.std():.3f}")Es gibt die Zahlen in der Tabelle aus:
0.867 0.042
0.873 0.074
0.807 0.077Wähle den höchsten Mittelwert; wenn die Mittelwerte nahe beieinanderliegen, die kleinere Standardabweichung.
Aufgabe
MittelEine Kochwebsite sagt voraus, welche Besucher ein Rezept kochen, das sie öffnen. Der Startcode bewertet drei Modelle anhand einer einzigen Aufteilung, und der Baum gewinnt. Überprüfe das fair; das Programm liest die Anzahl der Folds ein.
- Erstelle ein
KFoldmit dieser Anzahl an Aufteilungen,shuffle=Trueundrandom_state=0. - Führe für jedes Modell eine Kreuzvalidierung mit diesen Folds durch; gib den Mittelwert und die Standardabweichung mit 3 Dezimalstellen aus.
- Gib das Modell mit dem höchsten Mittelwert aus.
Für andere Besucher und 5:
One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logisticProbier es selbst
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
n_folds = int(input())
# Ändere die folgenden Zeilen nicht: 300 Besucher, 6 Surfgewohnheiten; das Label 1 bedeutet, dass sie das Rezept nachgekocht haben
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
DecisionTreeClassifier(max_depth=4, random_state=0)]
# Eine einzige Aufteilung kürt einen Gewinner
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
model.fit(X_train, y_train)
single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")
# 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: Screeningtest8Kreuzvalidierung
K-Fold-ValidierungModelle fair vergleichenGittersucheRückblick: Skateboard-Reparaturen3Lineare 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