Ricerca a Griglia Cv
Ora è il momento di cercare di migliorare le prestazioni del modello! Questo si ottiene trovando i migliori iperparametri adatti al nostro compito.
Questo processo è chiamato ottimizzazione degli iperparametri. L'approccio predefinito consiste nel provare diversi valori di iperparametri e calcolare per ciascuno un punteggio di validazione incrociata. Successivamente, si sceglie semplicemente il valore che produce il miglior punteggio.
Questo processo può essere eseguito utilizzando la classe GridSearchCV
del modulo sklearn.model_selection
.
Durante la costruzione di un oggetto GridSearchCV
, è necessario fornire il modello e la griglia dei parametri (e facoltativamente il metodo di scoring e il numero di fold). La griglia dei parametri (param_grid
) è un dizionario che contiene tutte le configurazioni di iperparametri che si desidera provare. Ad esempio, param_grid={'n_neighbors': [1, 3, 5, 7]}
proverà i valori 1, 3, 5 e 7 come numero di vicini.
Successivamente, si addestra il modello utilizzando il metodo .fit(X, y)
. Una volta completato l'addestramento, è possibile identificare il modello che ha ottenuto le migliori prestazioni — quello con il punteggio di validazione incrociata più alto, tipicamente basato sulla accuratezza — accedendo all'attributo .best_estimator_
.
Per consultare il punteggio di validazione incrociata di questo modello ottimale, fare riferimento all'attributo .best_score_
.
123456789101112131415import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Create the param_grid and initialize GridSearchCV object param_grid = {'n_neighbors': [1,3,5,7,9]} grid_search = GridSearchCV(KNeighborsClassifier(), param_grid) # Train the GridSearchCV object. During training it finds the best parameters grid_search.fit(X, y) # Print the best estimator and its cross-validation score print(grid_search.best_estimator_) print(grid_search.best_score_)
Il passo successivo consiste nel prendere il best_estimator_
e addestrarlo sull'intero dataset poiché sappiamo già che possiede i parametri migliori (tra quelli testati) e conosciamo il suo punteggio. Questo passaggio è così ovvio che GridSearchCV
lo esegue di default.
Quindi l'oggetto (grid_search
nel nostro esempio) diventa un modello addestrato con i parametri ottimali.
Ora è possibile utilizzare questo oggetto per la previsione o la valutazione. Per questo motivo GridSearchCV
dispone dei metodi .predict()
e .score()
.
123456789101112131415import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Create the param_grid and initialize GridSearchCV object param_grid = {'n_neighbors': [1,3,5,7,9]} grid_search = GridSearchCV(KNeighborsClassifier(), param_grid) # Train the GridSearchCV object. During training it finds the best parameters grid_search.fit(X, y) # Evaluate the grid_search on the training set # It is done only to show that .score() method works, evaluating on training set is not reliable. print(grid_search.score(X, y))
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.13
Ricerca a Griglia Cv
Scorri per mostrare il menu
Ora è il momento di cercare di migliorare le prestazioni del modello! Questo si ottiene trovando i migliori iperparametri adatti al nostro compito.
Questo processo è chiamato ottimizzazione degli iperparametri. L'approccio predefinito consiste nel provare diversi valori di iperparametri e calcolare per ciascuno un punteggio di validazione incrociata. Successivamente, si sceglie semplicemente il valore che produce il miglior punteggio.
Questo processo può essere eseguito utilizzando la classe GridSearchCV
del modulo sklearn.model_selection
.
Durante la costruzione di un oggetto GridSearchCV
, è necessario fornire il modello e la griglia dei parametri (e facoltativamente il metodo di scoring e il numero di fold). La griglia dei parametri (param_grid
) è un dizionario che contiene tutte le configurazioni di iperparametri che si desidera provare. Ad esempio, param_grid={'n_neighbors': [1, 3, 5, 7]}
proverà i valori 1, 3, 5 e 7 come numero di vicini.
Successivamente, si addestra il modello utilizzando il metodo .fit(X, y)
. Una volta completato l'addestramento, è possibile identificare il modello che ha ottenuto le migliori prestazioni — quello con il punteggio di validazione incrociata più alto, tipicamente basato sulla accuratezza — accedendo all'attributo .best_estimator_
.
Per consultare il punteggio di validazione incrociata di questo modello ottimale, fare riferimento all'attributo .best_score_
.
123456789101112131415import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Create the param_grid and initialize GridSearchCV object param_grid = {'n_neighbors': [1,3,5,7,9]} grid_search = GridSearchCV(KNeighborsClassifier(), param_grid) # Train the GridSearchCV object. During training it finds the best parameters grid_search.fit(X, y) # Print the best estimator and its cross-validation score print(grid_search.best_estimator_) print(grid_search.best_score_)
Il passo successivo consiste nel prendere il best_estimator_
e addestrarlo sull'intero dataset poiché sappiamo già che possiede i parametri migliori (tra quelli testati) e conosciamo il suo punteggio. Questo passaggio è così ovvio che GridSearchCV
lo esegue di default.
Quindi l'oggetto (grid_search
nel nostro esempio) diventa un modello addestrato con i parametri ottimali.
Ora è possibile utilizzare questo oggetto per la previsione o la valutazione. Per questo motivo GridSearchCV
dispone dei metodi .predict()
e .score()
.
123456789101112131415import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Create the param_grid and initialize GridSearchCV object param_grid = {'n_neighbors': [1,3,5,7,9]} grid_search = GridSearchCV(KNeighborsClassifier(), param_grid) # Train the GridSearchCV object. During training it finds the best parameters grid_search.fit(X, y) # Evaluate the grid_search on the training set # It is done only to show that .score() method works, evaluating on training set is not reliable. print(grid_search.score(X, y))
Grazie per i tuoi commenti!