Menu
CoddyTech

Gittersuche

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 39 von 58.

Manuelles Abstimmen bedeutet Schleifen in Schleifen. GridSearchCV kreuzvalidiert jede Kombination von Einstellungen und behält die beste bei. Für 300 Straßenbahnfahrten, verspätet oder pünktlich:

Ein 3-mal-3-Raster der mittleren Genauigkeiten: Baumtiefe 2, 4, 6 an der Seite, Mindestanzahl Zeilen pro Blatt 1, 5, 20 oben. Die beste Zelle, Tiefe 4 mit Blatt 5, erzielt 0.876 und ist umrahmt

Ein Wörterbuch ordnet jeder Einstellung die auszuprobierenden Werte zu. min_samples_leaf ist die kleinste Anzahl von Zeilen, die ein Blatt enthalten darf:

from sklearn.model_selection import GridSearchCV

grid = {"max_depth": [2, 4, 6], "min_samples_leaf": [1, 5, 20]}
search = GridSearchCV(DecisionTreeClassifier(random_state=0), grid, cv=5)
search.fit(X_train, y_train)
print(search.best_params_)
print(f"{search.best_score_:.3f}")
print(f"{search.score(X_test, y_test):.3f}")

Dies gibt Folgendes aus:

{'max_depth': 4, 'min_samples_leaf': 5}
0.876
0.813

Die Suche passt den Gewinner erneut mit allen Trainingszeilen an, sodass search.score ihn einmal testet. Halte die Grids klein: Jede Zelle kostet 5 Fits.

challenge icon

Aufgabe

Mittel

Ein Satellitenteam kennzeichnet Pixel mit k-NN als Wolken oder klaren Himmel. Das Programm liest das größte auszuprobierende k ein; der Starter teilt die Daten auf.

  1. Führe eine Rastersuche für jedes ungerade k von 1 bis zu dieser Zahl durch, mit weights "uniform" oder "distance" (nähere Nachbarn zählen stärker), cv=5.
  2. Gib die besten Einstellungen, ihre kreuzvalidierte Genauigkeit und die Testgenauigkeit mit 3 Dezimalstellen aus.

Für andere Pixel und 7:

Best k: 7, weights: distance
Cross-validated accuracy: 0.885
Test accuracy: 0.800

Probier es selbst

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier

max_k = int(input())

# Ändere die folgenden Zeilen nicht: 360 Satellitenpixel mit jeweils 4 Lichtmesswerten; das Label 1 bedeutet Wolke
X, y = make_classification(n_samples=360, n_features=4, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.7, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# 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