所以我使用 hyperopt,fmin 函数来优化超参数。但是,由于某种原因,我收到此错误:
TypeError: cannot convert dictionary update sequence element #0 to a sequence
我的代码是这样的:
fn = partial(self.loss_fn, x, y, metric, cv)
best = fmin(
fn=fn,
space=self.params[self.model.__class__.__name__],
algo=tpe.suggest,
max_evals=len(self.trials) + 10,
trials=self.trials,
)
self.model.set_params(best.params)
def loss_fn(self, x, y, metric, cv, params):
print(params)
print(self.model.__class__.__name__)
self.model.set_params(**params)
return -cross_val_score(self.model, x, y, scoring=make_scorer(metric), cv=cv)
奇怪的是,当我手动运行它时,它工作正常:
print(fn({"C": 1.0, "gamma": 0.1}))
有谁知道为什么会这样?