运行hyperopt fmin函数时出错(TypeError:无法将字典更新序列元素#0转换为序列)

2024-05-20 00:00:57 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我使用hyperopt,fmin函数来优化hyperparameters。然而,由于某种原因,我得到了这个错误:

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}))

有人知道为什么会这样吗


Tags: nameselfmodelparamsmetriccvclassfn