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
Iperparametri vs parametri
Comprensione della ricerca nella griglia
Convalida incrociata e GridSearchCV
Come applicare GridSearchCV?
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.
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.
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:
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 :)
Comentarios