У меня есть функция со многими параметрами, я хочу оптимизировать свою модель с помощью гиперопции, используя эту функцию
def optifunc(model_class, data, init_a, init_k, train_a, train_k, pred_a, pred_k):
print(model_class, data, init_a, init_k, train_a, train_k, pred_a, pred_k)
model = model_class(*init_a, **init_k)
return estimate_model(model, data,
train_args=train_a, train_kwargs=train_k, predict_args=pred_a, predict_kwargs=pred_k)
Там мой код с пробелом и вызовом fmin:
from hyperopt import fmin, hp, tpe
space4mean = ({'model_class': func_model,
'data': small_df,
'init_a': [],
'init_k': {hp.choice('winsize', np.arange(100))},
'train_a': [],
'train_k': {},
'pred_a': [],
'pred_k': {hp.choice('use_new_points', [True, False])}
})
best = fmin(
optifunc,
space4mean,
algo=tpe.suggest,
max_evals=100)
Я создаю пустые списки и списки, потому что я не использую эти параметры сейчас (я буду благодарен за помощь в поиске более лаконичного c способа сделать это). Когда я запускаю этот код, появляется ошибка ниже:
0%| | 0/100 [00:00<?, ?trial/s, best loss=?]
job exception: optifunc() missing 7 required positional arguments: 'data', 'init_a', 'init_k', 'train_a', 'train_k', 'pred_a', and 'pred_k'
0%| | 0/100 [00:00<?, ?trial/s, best loss=?]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-239-b5684be19c47> in <module>
3 space4mean,
4 algo=tpe.suggest,
----> 5 max_evals=100)
6 hp.choice(label, options)
~/miniconda3/lib/python3.7/site-packages/hyperopt/fmin.py in fmin(fn, space, algo, max_evals, timeout, loss_threshold, trials, rstate, allow_trials_fmin, pass_expr_memo_ctrl, catch_eval_exceptions, verbose, return_argmin, points_to_evaluate, max_queue_len, show_progressbar)
507
508 # next line is where the fmin is actually executed
--> 509 rval.exhaust()
510
511 if return_argmin:
~/miniconda3/lib/python3.7/site-packages/hyperopt/fmin.py in exhaust(self)
328 def exhaust(self):
329 n_done = len(self.trials)
--> 330 self.run(self.max_evals - n_done, block_until_done=self.asynchronous)
331 self.trials.refresh()
332 return self
~/miniconda3/lib/python3.7/site-packages/hyperopt/fmin.py in run(self, N, block_until_done)
284 else:
285 # -- loop over trials and do the jobs directly
--> 286 self.serial_evaluate()
287
288 self.trials.refresh()
~/miniconda3/lib/python3.7/site-packages/hyperopt/fmin.py in serial_evaluate(self, N)
163 ctrl = base.Ctrl(self.trials, current_trial=trial)
164 try:
--> 165 result = self.domain.evaluate(spec, ctrl)
166 except Exception as e:
167 logger.error("job exception: %s" % str(e))
~/miniconda3/lib/python3.7/site-packages/hyperopt/base.py in evaluate(self, config, ctrl, attach_attachments)
892 print_node_on_error=self.rec_eval_print_node_on_error,
893 )
--> 894 rval = self.fn(pyll_rval)
895
896 if isinstance(rval, (float, int, np.number)):
TypeError: optifunc() missing 7 required positional arguments: 'data', 'init_a', 'init_k', 'train_a', 'train_k', 'pred_a', and 'pred_k'
Что я делаю не так?