LoginSignup
1
2

More than 5 years have passed since last update.

hyperoptで再現性を担保するために必要なパラメータ設定について

Posted at

はじめに

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))
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2