2016-02-02 32 views
9

Próbuję użyć Losowego lasu dla mojego problemu (poniżej jest przykładowy kod dla zestawów danych boston, nie dla moich danych). Planuję użyć GridSearchCV do strojenia hiperparametrycznego, ale jaki powinien być zakres wartości dla różnych parametrów? Skąd będę wiedział, że wybrany przeze mnie zakres jest prawidłowy?Losowe strojenie hiperparametru w lesie scikit-learn przy użyciu GridSearchCV

czytałem o tym w internecie i ktoś zasugerował, aby spróbować "zbliżenia" na optimum w drugim grid-search (np jeśli to było 10, a następnie spróbuj [5, 20, 50]).

Czy to właściwe podejście? Czy mam zastosować to podejście do WSZYSTKICH parametrów wymaganych dla losowego lasu? Takie podejście może ominąć "dobrą" kombinację, prawda?

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_ 

Odpowiedz

3

Gruboziarnistość jest powszechnie używana do znajdowania najlepszych parametrów. Najpierw zacznij od szerokiej gamy parametrów i dopracuj je, zbliżając się do najlepszych wyników.

Znalazłem niesamowitą bibliotekę, która optymalizuje hiperparametr dla scikit-learn, hyperopt-sklearn. Może automatycznie dostroić RandomForest lub dowolne inne standardowe klasyfikatory. Możesz nawet automatycznie dostroić i porównać różne klasyfikatory w tym samym czasie.

Proponuję zacząć z tym, ponieważ realizuje różne programy, aby uzyskać najlepsze parametry:

Losowe Szukaj

Drzewo parzen estymatorów (TPE)

wyżarzania

Drzewo

Drzewo procesu Gaussa

EDIT:

W przypadku regresji, trzeba jeszcze stwierdzić, czy Twoje prognozy są dobre. Zgaduję, że można zawinąć Regressor do binarnego klasyfikatora implementującego scikit-learn estimator interface. z funkcją oceniania, aby użyć jej z biblioteką hyperopt ...

W każdym razie podejście "grube do dokładnego" nadal obowiązuje i jest ważne dla każdego taksator.

+0

To nie obsługuje regresji i wielu algorytmów, prawda? W rzeczywistości moim problemem jest regresja, a nie klasyfikacja. Zmieniłem moje pytanie. – Muhammad

+0

Twój kod pokazuje RandomForestClassifier ... – Kikohs

+0

Zmieniłem moje pytanie, przepraszam za zamieszanie. – Muhammad