python-3.x - 如何在 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 类的新手。任何帮助表示赞赏。
解决方案
推荐阅读
- ruby-on-rails - 在 Docker 中启动 sidekiq 时出错:“请将 sidekiq 指向 Rails 4/5 应用程序”
- c - `fgetc`、`fputc`、`fgets` 和 `fputs` 是否需要以文本模式打开的文件,而 `fread` 和 `fwrite` 需要以二进制模式打开的文件?
- azure - Azure 资源管理器 - 无法在访问策略中使用 Microsoft 应用服务部署 Keyvault
- python - 在 python PIL 中缩放和裁剪图像而不超出图像尺寸
- sql - 在同一查询中求和并连接列数据
- php - 从前端发布时,WordPress get_the_post_thumbnail_url() 不起作用
- javascript - CORS/JavaScript/Laravel:向 Digital Ocean 服务器发送请求并接收数据(标题问题)
- python - 光栅:ValueError:宽度和高度必须> 0
- javascript - 如何在 uri 中具有 {{variables}} 的请求的预请求中生成 hash512
- r - 使用多个正则表达式修改 data.table 内容