問題にランダムフォレストを使用しようとしています(以下は、私のデータではなく、ボストンのデータセットのサンプルコードです)。ハイパーパラメータの調整にGridSearchCV
を使用することを計画していますが、さまざまなパラメータの値の範囲はどのようにする必要がありますか?選択している範囲が正しいことをどのようにして知ることができますか?
私はインターネットでそれについて読んでいて、誰かが2番目のグリッド検索で最適なものに「ズームイン」することを提案しました(たとえば、10の場合は、[5、20、50]を試してください)。
これは正しいアプローチですか?ランダムフォレストに必要なすべてのパラメーターにこのアプローチを使用しますか?このアプローチは「良い」組み合わせを見逃すかもしれませんね?
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_
粗いものから細かいものまでは、実際には一般的に最適なパラメータを見つけるために使用されます。まず、さまざまなパラメーターから始めて、最良の結果に近づくにつれてそれらを改良します。
Scikit-learnのハイパーパラメーター最適化を行う素晴らしいライブラリを見つけました hyperopt-sklearn 。 RandomForestまたはその他の標準的な分類子を自動調整できます。さまざまな分類子を同時に自動調整してベンチマークすることもできます。
最適なパラメータを取得するためにさまざまなスキームを実装しているため、これから始めることをお勧めします。
ランダム検索
カーネル推定量(TPE)のツリー
アニーリング
木
ガウス過程ツリー
編集:
回帰の場合でも、テストセットで予測が適切かどうかを表明する必要があります。
とにかく、粗いものから細かいものへのアプローチは依然として成り立ち、どの推定量にも有効です。