Menu
CoddyTech

Ricerca a griglia

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 39 di 58.

La regolazione manuale significa annidare cicli. GridSearchCV convalida ogni combinazione di impostazioni e conserva la migliore. Per 300 corse del tram, in ritardo o in orario:

Una griglia 3 per 3 delle accuratezze medie: profondità dell'albero 2, 4, 6 lungo il lato, numero minimo di righe per foglia 1, 5, 20 in alto. La cella migliore, profondità 4 con foglia 5, ottiene 0.876 ed è evidenziata

Un dizionario associa ogni impostazione ai valori da provare. min_samples_leaf è il numero minimo di righe che una foglia può contenere:

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

Questo stampa:

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

La ricerca riadatta il vincitore su tutte le righe di addestramento, quindi search.score lo verifica una volta. Mantieni piccole le griglie: ogni cella richiede 5 adattamenti.

challenge icon

Sfida

Medio

Un team che lavora con i satelliti etichetta i pixel come nuvole o cielo sereno usando k-NN. Il programma legge il valore massimo di k da provare; il codice iniziale suddivide i dati.

  1. Esegui una ricerca a griglia per ogni k dispari da 1 fino a quel numero, con weights "uniform" o "distance" (i vicini più vicini contano di più), cv=5.
  2. Stampa le impostazioni migliori, la loro accuratezza convalidata incrociata e l'accuratezza sul test, con 3 decimali.

Per gli altri pixel e 7:

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

Provalo tu

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

max_k = int(input())

# Non modificare le righe qui sotto: 360 pixel satellitari, ciascuno con 4 letture della luce; l'etichetta 1 indica una nuvola
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)

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online