2016-02-02 31 views
9

Sto cercando di utilizzare la foresta casuale per il mio problema (di seguito è riportato un codice di esempio per i set di dati di Boston, non per i miei dati). Sto pianificando di utilizzare GridSearchCV per la regolazione iperparametrica, ma quale dovrebbe essere l'intervallo di valori per diversi parametri? Come faccio a sapere che la gamma che sto selezionando è quella corretta?Random Forest iperparametro tuning scikit-learn utilizzando GridSearchCV

stavo leggendo su di esso su internet e qualcuno ha suggerito di provare "zoom" sulla ottimale in seconda griglia-ricerca (ad esempio, se era 10 quindi provare [5, 20, 50]).

È questo l'approccio giusto? Devo usare questo approccio per TUTTI i parametri richiesti per la foresta casuale? Questo approccio può mancare una combinazione "buona", giusto?

import numpy as np 
from sklearn.grid_search import GridSearchCV 
from sklearn.datasets import load_digits 
from sklearn.ensemble import RandomForestRegressor 
digits = load_boston() 
X, y = dataset.data, dataset.target 
model = RandomForestRegressor(random_state=30) 
param_grid = { "n_estimators"  : [250, 300], 
      "criterion"   : ["gini", "entropy"], 
      "max_features"  : [3, 5], 
      "max_depth"   : [10, 20], 
      "min_samples_split" : [2, 4] , 
      "bootstrap": [True, False]} 
grid_search = GridSearchCV(clf, param_grid, n_jobs=-1, cv=2) 
grid_search.fit(X, y) 
print grid_search.best_params_ 

risposta

3

Il valore approssimativo è comunemente utilizzato per trovare i parametri migliori. Per prima cosa inizia con una vasta gamma di parametri e li perfezioni man mano che ti avvicini ai migliori risultati.

Ho trovato una fantastica libreria che ottimizza iperparametri per scikit-learn, hyperopt-sklearn. Può auto-ottimizzare il tuo RandomForest o qualsiasi altro classificatore standard. Puoi anche eseguire l'auto-tuning e il benchmark di diversi classificatori allo stesso tempo.

Vi suggerisco di iniziare con quello perché implementa sistemi diversi per ottenere i migliori parametri:

casuale Ricerca

Albero di Parzen stimatori (TPE)

ricottura

Albero

Gaussian Process Tree

EDIT:

Nel caso di regressione, è ancora bisogno di affermare se le tue previsioni sono buone. La mia ipotesi è che si potrebbe avvolgere il Regressore in un classificatore binario che implementa lo scikit-learn estimator interface. con una funzione di punteggio per utilizzarlo con la libreria hyperopt ...

In ogni caso, l'approccio approssimativo è valido per qualsiasi estimatore.

+0

Questo non supporta la regressione e molti algoritmi, vero? In realtà, il mio problema è la regressione e non la classificazione. Ho modificato la mia domanda. – Muhammad

+0

Il tuo codice mostra un RandomForestClassifier ... – Kikohs

+0

Ho modificato la mia domanda, mi dispiace per la confusione. – Muhammad