2016-02-02 1 views
9

J'essaie d'utiliser la forêt aléatoire pour mon problème (ci-dessous est un exemple de code pour les jeux de données boston, pas pour mes données). Je prévois d'utiliser GridSearchCV pour le réglage de l'hyperparamètre, mais quelle devrait être la plage de valeurs pour les différents paramètres? Comment saurai-je que la plage que je sélectionne est la bonne?Réglage de l'hyperparamètre Random Forest scikit-learn en utilisant GridSearchCV

Je lisais à ce sujet sur Internet et que quelqu'un a suggéré d'essayer « zoom » sur l'optimum dans une deuxième grille de recherche (par exemple si elle était 10 alors essayez [5, 20, 50]).

Est-ce la bonne approche? Dois-je utiliser cette approche pour TOUS les paramètres requis pour la forêt aléatoire? Cette approche peut manquer une "bonne" combinaison, non?

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_ 

Répondre

3

La méthode grossière à fine est couramment utilisée pour trouver les meilleurs paramètres. Vous commencez par un large éventail de paramètres et vous les affinez au fur et à mesure que vous vous rapprochez des meilleurs résultats.

J'ai trouvé une bibliothèque impressionnante qui fait l'optimisation hyperparameter pour scikit-learn, hyperopt-sklearn. Il peut auto-régler votre RandomForest ou d'autres classificateurs standard. Vous pouvez même régler automatiquement et classer différents classificateurs en même temps.

Je vous suggère de commencer par cela parce qu'il met en œuvre différents systèmes pour obtenir les meilleurs paramètres:

Recherche aléatoire

Arbre de Parzen Estimateurs (TPE)

Recuit

Arbre

Arbre de processus gaussien

EDIT:

Dans le cas de la régression, vous avez encore besoin d'affirmer si vos prédictions sont bonnes. Je suppose que vous pourriez envelopper le régresseur dans un classificateur binaire mettant en œuvre le scikit-learn estimator interface. avec une fonction de score pour l'utiliser avec la bibliothèque hyperopt ...

Quoi qu'il en soit, l'approche approximative reste valide et est valable pour tout estimateur.

+0

Cela ne prend pas en charge la régression et de nombreux algorithmes, n'est-ce pas? En fait, mon problème est la régression et non la classification. J'ai édité ma question. – Muhammad

+0

Votre code montre un RandomForestClassifier ... – Kikohs

+0

J'ai édité ma question, désolé pour la confusion. – Muhammad