Python sklearnモデルパラメータチューニング
2295 ワード
パラメータチューニングは往々にしてデータマイニングと分析において極めて重要な一歩であり、良いパラメータのセットはモデルの予測または分類をより正確にすることができ、モデルがデータの法則を完璧に描くことができ、pythonのsklearnには主に2つのパラメータチューニングの方法があり、それぞれグリッド検索法とランダム検索方法である.次に、2つのアルゴリズムの核心思想を紹介します.
1、メッシュサーチ法-GridSearchCV
グリッド検索方法は、各パラメータの特定の値を事前に与える必要があります(値範囲ではなく特定の値を取ることに注意してください).グリッド検索方法は、パラメータのグループを結合して各組合せのパラメータを適用してデータをフィッティングします.明らかに、提供するパラメータの値が多い場合、グリッド検索方法は特に時間がかかります.したがって、グリッド検索方法を適用してパラメータチューニングを行う場合は、モデルのパラメータ範囲を大まかに理解する必要があります.各パラメータの取りすぎないでください.そうしないと、パラメータ選択を行うのに非常に時間がかかります(もちろん、十分なマシンがあれば、より多くのパラメータの取り値を選択することもできます).
2、ランダムサーチ法-LandomizedSearchCV
ランダムサーチ法は,各パラメータの範囲をランダムに選択して対応する組合せを行う各パラメータの値範囲を事前に与える必要があり,ランダムサーチはメッシュサーチ法に比べてモデルの最適パラメータを見つける可能性が高く,比較的省時間である場合,パラメータの値が不確定であることに試用する.より広い範囲で最適なパラメータの組合せを探す必要がある.
1、メッシュサーチ法-GridSearchCV
グリッド検索方法は、各パラメータの特定の値を事前に与える必要があります(値範囲ではなく特定の値を取ることに注意してください).グリッド検索方法は、パラメータのグループを結合して各組合せのパラメータを適用してデータをフィッティングします.明らかに、提供するパラメータの値が多い場合、グリッド検索方法は特に時間がかかります.したがって、グリッド検索方法を適用してパラメータチューニングを行う場合は、モデルのパラメータ範囲を大まかに理解する必要があります.各パラメータの取りすぎないでください.そうしないと、パラメータ選択を行うのに非常に時間がかかります(もちろん、十分なマシンがあれば、より多くのパラメータの取り値を選択することもできます).
#
from sklearn.ensemble import RandomForestClassifier
from sklearn import datasets
from sklearn.model_selection import GridSearchCV
# iris
iris = datasets.load_iris()
iris_feature = iris['data']
iris_target = iris['target']
#
forest_clf=RandomForestClassifier(random_state=42)
#
param_grid =[{'n_estimators':[10,30,50,100], # , 。
, , , 。
, 。 , 。 。 ,
。
'max_depth':[5,10,20]}]
#
grid_search = GridSearchCV(forest_clf,param_grid,cv=3)
#
grid_search.fit(iris_feature,iris_target)
#
print(grid_search.best_params_)
best_model = grid_search.best_estimator_
2、ランダムサーチ法-LandomizedSearchCV
ランダムサーチ法は,各パラメータの範囲をランダムに選択して対応する組合せを行う各パラメータの値範囲を事前に与える必要があり,ランダムサーチはメッシュサーチ法に比べてモデルの最適パラメータを見つける可能性が高く,比較的省時間である場合,パラメータの値が不確定であることに試用する.より広い範囲で最適なパラメータの組合せを探す必要がある.
#
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV # sklearn
(.py )
import numpy as np
# iris
iris = datasets.load_iris()
iris_feature = iris['data']
iris_target = iris['target']
#
forest_clf = RandomForestClassifier(random_state=42)
param_distribs = {'n_estimators':range(10,100),'max_depth':range(5,20)}
random_search = RandomizedSearchCV(forest_clf,param_distribs,n_iter=50,cv=3) #
random_search.fit(iris_feature,iris_target) #
print(random_search.best_params_)
best_model = random_search.best_estimator_