首页 > 解决方案 > 如何在 Python 类中传递内部函数

问题描述

我正在尝试使用一个类来进行 hyeropt 参数调整,以合并不同的模型和参数网格。这是我的代码:

class hopt:
  def __init__(self, clf, params, x, y):
    self.clf = clf
    self.params = params
    self.x = x
    self.y = y

  def f(self):
    self.clf = self.clf(**self.params, random_state=2019, n_jobs=-1)
    score = cross_val_score(self.clf, self.x, self.y, scoring='roc_auc', cv=StratifiedKFold(5, True, 2019))
    pred = cross_val_predict(self.clf, self.x, self.y, cv=StratifiedKFold(5, True, 2019),
                             method='predict_proba',
                             n_jobs=-1)[:, 1]
    return {'loss': -np.mean(score), 'status': STATUS_OK, 'pred': pred}

  def search(self, max_evals, f=f):
    trials = Trials()
    fmin(f, self.params, algo=tpe.suggest, max_evals=max_evals, rstate=np.random.RandomState(2019), trials=trials)
    return trials.best_trial['result']['pred'][:, 1]

我要做的是将函数“f”传递给函数“search”,这两个函数都是在类中创建的。但我收到错误消息:AttributeError: 'dict' object has no attribute 'clf'

抱歉,我是 Python 类的新手。任何帮助表示赞赏。

标签: python-3.x

解决方案


推荐阅读