ハイパーパラメータのチューニング
前回の続き交差検証を調べていたら以下の記事に遭遇これの後半にモデルに対するパラメータのチューニングの仕方が載っていたので、それを参考に今回は「ハイパーパラメータのチューニング」をやってみることにする。
scikit-learn を用いた交差検証(Cross-validation)とハイパーパラメータのチューニング(grid search) - Qiita#はじめに 本記事は ( の 5 章(モデルの評価と改良)に記載されている内容を簡単にまとめたものになって...
ググる

いくつかググってみたのだが、ここが自分には一番わかりやすかった。 つまるところ、それぞれのモデル?を作成する際のパラメータについて、
いっぱい試したいからそれを設定できるようにしたぜってことの様子。
なので、これだけ理解しても無駄だった。
それぞれのモデルに食わせたいパラメータを理解しないと意味がないと理解。
とりあえず決定木とSVMのパラメータを作ってみた
決定木# GridSearchしてその結果最適なパラメータで設定
clf = DecisionTreeClassifier()
# 試行するパラメータを羅列する
params = {
'max_depth': list(range(1, 10)),
'min_samples_split' : list(range(3, 10)),
'criterion': ['gini', 'entropy'],
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
clf = SVC(class_weight='balanced', random_state=0)
# 試行するパラメータを羅列する
params = {
'C': [0.01, 0.1, 1.0],
'gamma' : [0.01, 0.1, 1.0],
'kernel': ['rbf', 'linear'],
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
def GridSearch(clf, param_grid, cv_cnt, predictor_var, response_var):
print(" --- grid_search ")
# グリッドサーチにより最適値を求める
# from sklearn import grid_search
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(estimator=clf, param_grid=param_grid, scoring='accuracy', cv=cv_cnt, n_jobs=-1)
grid_search.fit(predictor_var, response_var)
print(grid_search.best_score_)
print(grid_search.best_params_)
# print(gs.best_estimator_)
# return grid_search.best_params_
return grid_search.best_estimator_
でも、スコアとかパラメタを返却されても使わないよな?
そしていずれのサイトにも書いてある「時間がかかる」という意味も理解。
ここら辺からPCのパワーが必要になってくるのかもしれない。 ついでに効果が高そうなRandomForestについてもGridSearchさせてみることにする
参考:http://blog.tatsushim.com/?p=63
clf = RandomForestClassifier()
params = {
'n_estimators' : [5, 10, 20, 30, 50, 100, 300],
'max_features' : [3, 5, 10, 15, 20],
'random_state' : [0],
'n_jobs' : [1],
'min_samples_split' : [3, 5, 10, 15, 20, 25, 30, 40, 50, 100],
'max_depth' : [3, 5, 10, 15, 20, 25, 30, 40, 50, 100]
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
return best_estimator
ValueError: max_features must be in (0, n_features]
max_featuresで怒られているのでいったんデフォルトにさせてそれ以外のパラメータで試行。で、得られたパラメータが以下。
{'max_depth': 15, 'min_samples_split': 15, 'n_estimators': 50, 'n_jobs': 1, 'random_state': 0}
スコアは0.836139169473 このパラメータ+max_featuresで再実施。
が、やっぱり
ValueError: max_features must be in (0, n_features]
何かが違っているんだろうな。
よくわからないので先に進むことにする。
アップロードしてみる
ということで、DecisionTree、SVM、Random Forestに対してGridSearchしたうえでパラメータを再設定しての結果が以下。 model_name score
6 Random Forest 0.836176
0 DecisionTree 0.823866
1 LogisticRegression 0.798048
2 Support Vector Machines 0.785587
4 Gaussian Naive Bayes 0.782329
3 k近傍法(KNN) 0.714028
5 Perceptron 0.552625
なので、これでテストもかましてアップロードしてみることにする。



