#はじめに
hyperoptを使って、パラメータチューニングしてみたが、毎回結果が変わってしまい、困っていました。
乱数の設定方法について、記載されているようなものも少なかったので、自身の備忘録も兼ねて掲載。
#環境
言語:Python
環境:kaggleのkernel(titanicのチュートリアルを行なっていたので。)
hyperoptにおいて必要なパラメータ設定
fminの引数にrstateがあり、
rstate = np.random.RandomState()
と記述することで、乱数が固定され、再現性を担保できます。
※使用するモデルでの乱数設定や使用データのスプリットにおける乱数設定は忘れずに。
これに気づくまでに1日ほど費やしてしまいました。。。
困ったときは、Helpを見るのが一番ですね。
インポート
from hyperopt import hp, tpe, Trials, fmin
import numpy as np
from sklearn.ensemble import RandomForestClassifier
##hyperopt
hyperopt_parameters = {
'max_depth': hp.choice('max_depth', range(1,20)),
'max_features': hp.choice('max_features', range(2,31)),
'n_estimators': hp.choice('n_estimators', range(100,300))}
def objective(args):
classifier = RandomForestClassifier(**args,criterion = "entropy",random_state=0,n_jobs=-1)
logloss = cross_val_score(X=dev_X,estimator=classifier,n_jobs=-1,y=dev_y,scoring="neg_log_loss",cv=3).mean()
return -1*logloss
max_evals = 300
trials = Trials()
best = fmin(objective,hyperopt_parameters,algo=tpe.suggest,max_evals=max_evals,trials=trials,verbose=1,rstate=np.random.RandomState(0))