7

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)

ありがとう

4

1 に答える 1