我尝试在Python中使用optuna lib来优化推荐系统模型的参数。这些模型是定制的,看起来像标准的fit-learn模型(带有get/set参数的方法)。你知道吗
我做的是:从均匀整数分布中选择两个参数的简单目标函数,将这些参数设置为模型,预测模型(没有拟合阶段,因为它是在预测阶段只使用参数的简单模型)并计算一些度量。你知道吗
我得到的是:第一次测试运行正常,它对参数进行采样,并将结果打印到日志中。但在第二次和下一次试验中,我有一些奇怪的错误(请看下面的代码),我无法解决或谷歌。当我在一次试验中进行研究时,一切都很好。你知道吗
我尝试的是:重新安排目标函数的各个部分,将fit阶段放进去,尝试计算更简单的度量——没有任何帮助。你知道吗
这是我的目标函数:
# getting train, test
# fitting model
self.model = SomeRecommender()
self.model.fit(train, some_other_params)
def objective(trial: optuna.Trial):
# save study
if path is not None:
joblib.dump(study, some_path)
# sampling params
alpha = trial.suggest_uniform('alpha', 0, 100)
beta = trial.suggest_uniform('beta', 0, 100)
# setting params to model
params = {'alpha': alpha,
'beta': beta}
self.model.set_params(**params)
# getting predict
recs = self.model.predict(some_other_params)
# metric computing
metric_result = Metrics.hit_rate_at_k(recs, test, k=k)
return metric_result
# starting study
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=3, n_jobs=1)
这就是我在三次试验中得到的结果:
[I 2019-10-01 12:53:59,019] Finished trial#0 resulted in value: 0.1. Current best value is 0.1 with parameters: {'alpha': 59.6135986324444, 'beta': 40.714559720597585}.
[W 2019-10-01 13:39:58,140] Setting status of trial#1 as TrialState.FAIL because of the following error: AttributeError("'_BaseUniformDistribution' object has no attribute 'to_internal_repr'")
Traceback (most recent call last):
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/study.py", line 448, in _run_trial
result = func(trial)
File "/Users/roseaysina/code/project/model.py", line 100, in objective
'alpha', 0, 100)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/trial.py", line 180, in suggest_uniform
return self._suggest(name, distribution)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/trial.py", line 453, in _suggest
self.study, trial, name, distribution)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/samplers/tpe/sampler.py", line 127, in sample_independent
values, scores = _get_observation_pairs(study, param_name)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/samplers/tpe/sampler.py", line 558, in _get_observation_pairs
param_value = distribution.to_internal_repr(trial.params[param_name])
AttributeError: '_BaseUniformDistribution' object has no attribute 'to_internal_repr'
[W 2019-10-01 13:39:58,206] Setting status of trial#2 as TrialState.FAIL because of the following error: AttributeError("'_BaseUniformDistribution' object has no attribute 'to_internal_repr'")
Traceback (most recent call last):
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/study.py", line 448, in _run_trial
result = func(trial)
File "/Users/roseaysina/code/project/model.py", line 100, in objective
'alpha', 0, 100)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/trial.py", line 180, in suggest_uniform
return self._suggest(name, distribution)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/trial.py", line 453, in _suggest
self.study, trial, name, distribution)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/samplers/tpe/sampler.py", line 127, in sample_independent
values, scores = _get_observation_pairs(study, param_name)
File "/Users/roseaysina/anaconda3/envs/sauvage/lib/python3.7/site-packages/optuna/samplers/tpe/sampler.py", line 558, in _get_observation_pairs
param_value = distribution.to_internal_repr(trial.params[param_name])
AttributeError: '_BaseUniformDistribution' object has no attribute 'to_internal_repr'
我不明白问题出在哪里,也不明白为什么一审能奏效。拜托,救命啊。你知道吗
谢谢你!你知道吗
你的代码似乎没有问题。你知道吗
我运行了您的代码的简化版本(见下文),它在我的环境中运行良好:
为了调查这个问题,你能告诉我你的环境吗?(例如,操作系统、Python版本、Python解释器(CPython、pypypy、IronPython或Jython)、Optuna版本)
这个错误是由optuna/samplers/tpe/sampler.py#558引起的,只有当研究中完成的试验数大于零时才执行这一行。你知道吗
顺便说一句,您可以通过使用
RandomSampler
来避免这个问题,如下所示:注意,
RandomSampler
的优化性能往往比Optuna的默认采样器TPESampler
差。你知道吗相关问题 更多 >
编程相关推荐