top of page
Team I.A. Italia

Ottimizzare gli iperparametri con GridSearchCV e Python

Il processo decisionale basato sui dati ha un ampio coinvolgimento degli algoritmi di apprendimento automatico. Per un problema aziendale, il professionista non si affida mai a un algoritmo. Si applicano sempre più algoritmi rilevanti in base al problema e si seleziona il modello migliore in base alle migliori metriche di prestazione mostrate dai modelli. Ma questa non è la fine. È possibile aumentare le prestazioni del modello utilizzando gli iperparametri. Pertanto, trovare gli iperparametri ottimali ci aiuterebbe a ottenere il modello con le migliori prestazioni. In questo articolo impareremo su Hyperparameters, Grid Search, Cross-Validation, GridSearchCV e l'ottimizzazione di Hyperparameters in Python.


Gli iperparametri per un modello possono essere scelti utilizzando diverse tecniche come Ricerca casuale, Ricerca griglia, Ricerca manuale, Ottimizzazioni bayesiane, ecc. In questo articolo impareremo su GridSearchCV che utilizza la tecnica Grid Search per trovare gli iperparametri ottimali per aumentare il modello prestazione.



Indice su Come ottimizzare gli iperparametri con GridSearchCV

  1. Iperparametri vs parametri

  2. Comprensione della ricerca nella griglia

  3. Convalida incrociata e GridSearchCV

  4. Come applicare GridSearchCV?

  5. Conclusioni

Iperparametri vs parametri

Sia i parametri che gli iperparametri sono associati al modello di Machine Learning, ma entrambi sono pensati per attività diverse. Capiamo come sono diversi tra loro nel contesto del Machine Learning.


I parametri sono le variabili utilizzate dall'algoritmo di Machine Learning per prevedere i risultati in base ai dati storici di input.


Questi sono stimati utilizzando un algoritmo di ottimizzazione dello stesso algoritmo di Machine Learning. Pertanto, queste variabili non sono impostate o codificate dall'utente o dal professionista. Queste variabili sono servite come parte dell'addestramento del modello. Esempio di parametri: Coefficiente di variabili indipendenti Regressione lineare e Regressione logistica.


Gli iperparametri sono le variabili che l'utente specifica in genere durante la creazione del modello di Machine Learning.


Quindi, gli iperparametri vengono specificati prima di specificare i parametri o possiamo dire che gli iperparametri vengono utilizzati per valutare i parametri ottimali del modello. La parte migliore degli iperparametri è che i loro valori sono decisi dall'utente che sta costruendo il modello. Ad esempio, max_depth negli algoritmi della foresta casuale, k nel classificatore KNN.


Tieni a mente questa differenza, solitamente viene fatta ai colloqui.


Comprensione della ricerca nella griglia

Ora che sappiamo cosa sono gli iperparametri, il nostro obiettivo dovrebbe essere trovare i migliori valori di iperparametri per ottenere i risultati di previsione perfetti dal nostro modello. Ma sorge la domanda, come trovare questi migliori insiemi di iperparametri? Si può provare il metodo di ricerca manuale, utilizzando il processo hit and trial e si possono trovare i migliori iperparametri che richiederebbero molto tempo per costruire un singolo modello.


Per questo motivo sono stati introdotti metodi come Random Search, GridSearch. Qui, discuteremo come viene eseguita Grid Seach e come viene eseguita con la convalida incrociata in GridSearchCV.


Questa ricerca a griglia utilizza una combinazione diversa di tutti gli iperparametri specificati e dei relativi valori, calcola le prestazioni per ciascuna combinazione e seleziona il valore migliore per gli iperparametri. Ciò rende l'elaborazione dispendiosa in termini di tempo e costo in base al numero di iperparametri coinvolti.



Ottimizzare gli iperparametri con GridSearchCV e Python
Ottimizzare gli iperparametri con GridSearchCV e Python

Ricerca della griglia su due parametri (immagine di Alexander Elvers da WikiMedia )


Convalida incrociata e GridSearchCV

In GridSearchCV, insieme a Grid Search, viene eseguita anche la convalida incrociata. La convalida incrociata viene utilizzata durante l'addestramento del modello. Come sappiamo, prima di addestrare il modello con i dati, dividiamo i dati in due parti: dati di training e dati di test . Nella convalida incrociata, il processo divide ulteriormente i dati del treno in due parti: i dati del treno e i dati di convalida.


Il tipo più popolare di convalida incrociata è la convalida incrociata K-fold. È un processo iterativo che divide i dati del treno in k partizioni. Ogni iterazione conserva una partizione per il test e le restanti partizioni k-1 per il training del modello. L'iterazione successiva imposterà la partizione successiva come dati di test e il restante k-1 come dati del treno e così via. In ogni iterazione, registrerà le prestazioni del modello e alla fine darà la media di tutte le prestazioni. Pertanto, è anche un processo che richiede tempo.

Pertanto, GridSearch insieme alla convalida incrociata impiega molto tempo cumulativamente per valutare i migliori iperparametri. Ora vedremo come utilizzare GridSearchCV nel nostro problema di Machine Learning.



Ottimizzare gli iperparametri con GridSearchCV e Python
Ottimizzare gli iperparametri con GridSearchCV e Python

Convalida incrociata K-Fold (immagine di Gufosowa da WikiMedia )


Come applicare GridSearchCV?

Il metodo .GridSearchCV() è disponibile nella classe scikit-learn model_selection. Può essere avviato creando un oggetto di GridSearchCV():

clf = GridSearchCv(stimatore, param_grid, cv, punteggio)

In primo luogo, sono necessari 4 argomenti, ovvero estimator , param_grid , cv e scoring . La descrizione degli argomenti è la seguente:

1. estimatore – Un modello scikit-learn

2. param_grid – Un dizionario con nomi di parametri come chiavi ed elenchi di valori di parametro.

3. punteggio – La misura della performance. Ad esempio, ' r2 ' per i modelli di regressione, ' precision ' per i modelli di classificazione.

4. cv – Un numero intero che è il numero di pieghe per la convalida incrociata K-fold.

GridSearchCV può essere utilizzato su diversi iperparametri per ottenere i valori migliori per gli iperparametri specificati.


Ora applichiamo GridSearchCV con un set di dati di esempio:

Potete scaricare il dataset cliccando qui , e cercando heart.csv utilizzando l'icona in alto a destra (il tasto evidenziato nella fotto seguente) .



Come ottimizzare gli iperparametri con GridSearchCV e Python ?


Dopo aver visto la teoria base, sporchiamoci le mani con un pò di codice.


#importiamo le librerie necessarie 
import pandas as pd

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn import metrics
import warnings
warnings.filterwarnings('ignore')

#carichiamo il dataset scaricato
df = pd.read_csv('heart.csv')
print(df.head())


Dividiamo le variabili indipendenti e dipendenti(target)

X = df.drop('target', axis = 1)

y = df['target']

Dividiamo i dati in Train e Test

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)

Inizializziamo un modello Random Forest Classifier

rfc = RandomForestClassifier()

Qui, abbiamo creato l'oggetto rfc di RandomForestClassifier().


Inizializzazione dell'oggetto GridSearchCV() e adattamento con iperparametri

forest_params = [{'max_depth': list(range(10, 15)), 'max_features': list(range(0,14))}]

clf = GridSearchCV(rfc, forest_params, cv = 10, scoring='accuracy')

clf.fit(X_train, y_train)

Qui, abbiamo passato l'oggetto estimatore rfc , param_grid come forest_params , cv = 5 e il metodo di punteggio come accuratezza in GridSearchCV() come argomenti.


Otteniamo i migliori iperparametri

print(clf.best_params_)

Questo darà la combinazione di iperparametri insieme a valori che danno le migliori prestazioni della nostra stima specificata.


Mettiamo tutto il codice insieme

import pandas as pd

from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import train_test_split

from sklearn.model_selection import GridSearchCV

from sklearn import metrics

import warnings

warnings.filterwarnings('ignore')

df = pd.read_csv('heart.csv')

X = df.drop('target', axis = 1)

y = df['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)

rfc = RandomForestClassifier()

forest_params = [{'max_depth': list(range(10, 15)), 'max_features': list(range(0,14))}]

clf = GridSearchCV(rfc, forest_params, cv = 10, scoring='accuracy')

clf.fit(X_train, y_train)

print(clf.best_params_)

print(clf.best_score_)

Eseguendo il codice sopra, otteniamo:


Ottimizzare gli iperparametri con GridSearchCV e Python
Ottimizzare gli iperparametri con GridSearchCV e Python

Migliori parametri e miglior punteggio del classificatore foresta casuale

Pertanto, clf.best_params_ fornisce la migliore combinazione di iperparametri ottimizzati e clf.best_score_ fornisce il punteggio medio con convalida incrociata del nostro Classificatore di foresta casuale.


Conclusioni su come Ottimizzare gli iperparametri con GridSearchCV e Python

In questo articolo, abbiamo appreso di Grid Search, K-fold Cross-Convalidation, GridSearchCV e come fare un buon uso.


GridSearchCV è una fase di selezione del modello e dovrebbe essere eseguita dopo le attività di elaborazione dei dati. È sempre bene confrontare le prestazioni dei modelli Tuned e Untuned. Questo ci costerà tempo e denaro ma sicuramente ci darà i migliori risultati. L'API scikit-learn è un'ottima risorsa in caso di aiuto.


È sempre bello imparare facendo. Condividi l'articolo per aiutarci a diffondere la cultura del dato e dell'intelligenza artificiale :)

תגובות

דירוג של 0 מתוך 5 כוכבים
אין עדיין דירוגים

הוספת דירוג
PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere