私は、sklearn.grid_search.GridSearchCV
を使ってIrisデータセット上の決定木の分類子に最適な機能を得ようとしていました。データが偏っているので、クロスバリデーションにStratifiedKFold(sklearn.cross_validation.StratifiedKFold
)を使用しました。しかし、GridSearchCV
が実行されるたびに、別のパラメータセットが返されました。
データとクロスバリデーションが毎回同じであることを前提に、同じ最適パラメータのセットを返してはいけませんか?sklearn.grid_search.GridSearchCVが実行ごとにランダムな結果を返すのはなぜですか?
ソースコードは次のとおりです。
from sklearn.tree import DecisionTreeClassifier
from sklearn.grid_search import GridSearchCV
decision_tree_classifier = DecisionTreeClassifier()
parameter_grid = {'max_depth': [1, 2, 3, 4, 5],
'max_features': [1, 2, 3, 4]}
cross_validation = StratifiedKFold(all_classes, n_folds=10)
grid_search = GridSearchCV(decision_tree_classifier, param_grid = parameter_grid,
cv = cross_validation)
grid_search.fit(all_inputs, all_classes)
print "Best Score: {}".format(grid_search.best_score_)
print "Best params: {}".format(grid_search.best_params_)
出力:これは、することができ、私はランダル・S・オルソンさんノートを参照して、最近作られたIpythonノートからの抜粋である
Best Score: 0.959731543624
Best params: {'max_features': 2, 'max_depth': 2}
Best Score: 0.973154362416
Best params: {'max_features': 3, 'max_depth': 5}
Best Score: 0.973154362416
Best params: {'max_features': 2, 'max_depth': 5}
Best Score: 0.959731543624
Best params: {'max_features': 3, 'max_depth': 3}
見つけたhere。
編集: そのない多様な結果をもたらすStratifiedKFold
のrandom_state
パラメータではなく、ランダムツリーを初期化し(documentationを参照)多様な結果を与えるDecisionTreeClassifer
のrandom_state
パラメータ。 StratifiedKFold
については、shuffle
パラメータがFalse
(デフォルト)に設定されている限り、同じトレーニングテストの分割が生成されます(マニュアルを参照)。
そのない様々な結果になりStratifiedKFold' 'の' random_state'パラメータではなく、むしろの 'random_state'パラメータ木をランダムにランダムに初期化し、様々な結果を与える 'DecisionTreeClassifer'。 'StratifiedKFold'は' shuffle'パラメータが 'False'(デフォルト)に設定されている限り、同じ訓練テストの分割を生成します。私はこの結果を[ここ](https://github.com/darthv115/Machine-Learning-and-Data-Science-Projects/blob/master/Iris_Classification/Rectifications_to_original_notebook.ipynb)にある個別のIpythonノートブックでチェックしました。 – darthy