1

所以我使用 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}))

有谁知道为什么会这样?

4

1 回答 1

1

Okay, I figured it out myself. cross_val_score returns a list of values, not a single value.

于 2020-05-12T10:16:06.613 回答