Menu
CoddyTech

Przeszukiwanie siatki

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 39 z 58.

Ręczne dostrajanie oznacza pętle zagnieżdżone w sobie. GridSearchCV sprawdza krzyżowo każdą kombinację ustawień i zachowuje najlepszą. Dla 300 przejazdów tramwajem, opóźnionych lub punktualnych:

Siatka 3 na 3 ze średnimi dokładnościami: głębokość drzewa 2, 4, 6 wzdłuż boku, minimalna liczba wierszy w liściu 1, 5, 20 w poprzek. Najlepsza komórka, głębokość 4 i liść 5, uzyskuje wynik 0.876 i jest obramowana

Słownik przypisuje każdemu ustawieniu wartości do przetestowania. min_samples_leaf to najmniejsza liczba wierszy, jakie może zawierać liść:

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}")

To wypisuje:

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

Wyszukiwanie ponownie dopasowuje zwycięski model do wszystkich wierszy treningowych, więc search.score testuje go raz. Siatki powinny być małe: każda komórka kosztuje 5 dopasowań.

challenge icon

Wyzwanie

Średni

Zespół satelitarny klasyfikuje piksele jako chmury lub czyste niebo za pomocą k-NN. Program odczytuje największe k do sprawdzenia; kod startowy dzieli dane.

  1. Przeprowadź wyszukiwanie siatki dla każdej nieparzystej wartości k od 1 do tej liczby, z weights ustawionym na "uniform" lub "distance" (bliżsi sąsiedzi mają większe znaczenie) i cv=5.
  2. Wypisz najlepsze ustawienia, ich dokładność w walidacji krzyżowej oraz dokładność na zbiorze testowym, z dokładnością do 3 miejsc po przecinku.

Dla pozostałych pikseli i 7:

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

Spróbuj swoich sił

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

max_k = int(input())

# Nie zmieniaj poniższych wierszy: 360 pikseli satelitarnych, po 4 odczyty światła dla każdego; etykieta 1 oznacza chmurę
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)

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online