hyperopt を使用して ML モデルを調整しようとしていますが、qloguniform を検索スペースとして使用する際に問題があります。公式wikiの例を挙げて、検索スペースを変更しました。
import pickle
import time
#utf8
import pandas as pd
import numpy as np
from hyperopt import fmin, tpe, hp, STATUS_OK, Trials
def objective(x):
return {
'loss': x ** 2,
'status': STATUS_OK,
# -- store other results like this
'eval_time': time.time(),
'other_stuff': {'type': None, 'value': [0, 1, 2]},
# -- attachments are handled differently
'attachments':
{'time_module': pickle.dumps(time.time)}
}
trials = Trials()
best = fmin(objective,
space=hp.qloguniform('x', np.log(0.001), np.log(0.1), np.log(0.001)),
algo=tpe.suggest,
max_evals=100,
trials=trials)
pd.DataFrame(trials.trials)
しかし、次のエラーが発生します。
ValueError: ('negative arg to lognormal_cdf', array([-3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, -3.45387764, - 3.45387764、-3.45387764、-3.45387764、-3.45387764、-3.45387764、-3.45387764、-3.45387764、-3.45387764、-3.45387764、-3.45387764、-3.45387764、-7.436
以下のように対数変換なしで試してみましたが、出力値は対数変換(例: 1.017,1.0008,1.02456) になり、これは間違っています。ドキュメントと一致しています。
hp.qloguniform('x', 0.001,0.1, 0.001)
ありがとう