Optimiere den Sieger
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 53 von 58.
k-NN hat mit seinem Standardwert von 5 Nachbarn gewonnen. Würde ein anderer k die Pinguine besser benennen? Eine Grid-Suche bewertet jedes k, das du angibst, mithilfe der Kreuzvalidierung, wie hier für Tumoraufnahmen:
Wie beim Optimieren einer Pipeline wird k nach seinem Schritt benannt:
{"kneighborsclassifier__n_neighbors": [3, 5, 7]}Ein Zugewinn, der kleiner ist als die Standardabweichung der Folds, kann Zufall sein. Auch das Abstimmen verwendet nur die Trainingszeilen.
Aufgabe
MittelDeine k-NN-Pipeline ist pipe, und default enthält ihre CV-Genauigkeit mit k = 5. Das Programm liest die auszuprobierenden k-Werte in ks ein.
- Führe für diese Werte eine Grid-Suche mit 5 Folds auf den Trainingszeilen durch.
- Gib das beste k und seine CV-Genauigkeit mit 3 Dezimalstellen aus.
- Gib den Zugewinn gegenüber k = 5 mit 3 Dezimalstellen aus.
Für eine andere Kolonie und das Raster 3, 5, 9:
Best k: 3
CV accuracy: 0.969
Gain over k = 5: 0.009Probiere dann nur große Werte aus, etwa 21 bis 27. Hilft die Abstimmung immer?
Probier es selbst
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.neighbors import KNeighborsClassifier
# Die Kolonie aus Meet the Penguins, ihre Merkmale und ihr Label
penguins = pd.read_csv("penguins.csv")
numbers = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
text = ["island", "sex"]
X = penguins[numbers + text]
y = penguins["species"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0)
# Aus Prepare the Data: die beiden Verarbeitungswege
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])
# Aus Choose a Model: der Gewinner, k-NN mit dem Standardwert k = 5
pipe = make_pipeline(prep, KNeighborsClassifier())
default = cross_val_score(pipe, X_train, y_train, cv=5).mean()
# Die auszuprobierenden Werte für k
n = int(input())
ks = []
for i in range(n):
ks.append(int(input()))
# 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-Reparaturen11Projekt: Pinguinarten
Lerne die Pinguine kennenBereite die Daten vorWähle ein ModellOptimiere den SiegerBringe das Modell in den Einsatz3Lineare 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