【问题标题】:Imblearn Pipeline and HyperOpt IssueImblearn 管道和 HyperOpt 问题
【发布时间】:2020-11-05 03:28:11
【问题描述】:

目前我正在尝试使用 SMOTE 进行过采样,然后在管道中运行我的 XGBClassifier。出于某种原因,我无法让 HyperOpt 与 Pipeline 配合使用。

下面两个例子都运行正常:

smote = SMOTE(random_state = 42)
model = XGBClassifier(random_state = 42)
pipe = Pipeline([('smote', smote),
('model',model)])

cv = StratifiedKFold(n_splits = 5)

score = cross_val_score(pipe, X_train, y_train, cv=cv, scoring='roc_auc', n_jobs=-1).mean()

print(score)
model = XGBClassifier(random_state = 42)

def objective_pipe(params):
  model.set_params(**params)

  cv = StratifiedKFold(n_splits = 5)

  score = cross_val_score(model, X_train, y_train, cv=cv, scoring='roc_auc', n_jobs=-1).mean()

  return {'loss': -score, 'params':params, 'status':STATUS_OK}

trials = Trials()
best = fmin(fn=objective_pipe, space = params, algo=tpe.suggest, max_evals = 10, trials = trials, rstate=np.random.RandomState(42))

但是,当我将 Pipeline 放入目标函数中时,我最终会得到分数的 NaN 值。

smote = SMOTE(random_state = 42)
model = XGBClassifier(random_state = 42)
pipe = Pipeline([('smote', smote),
('model',model)])

def objective_pipe(params):
  pipe.set_params(**params)

  cv = StratifiedKFold(n_splits = 5)

  score = cross_val_score(pipe, X_train, y_train, cv=cv, scoring='roc_auc', n_jobs=-1).mean()

  return {'loss': -score, 'params':params, 'status':STATUS_OK}

trials = Trials()
best = fmin(fn=objective_pipe, space = params, algo=tpe.suggest, max_evals = 10, trials = trials, rstate=np.random.RandomState(42))

也许我只是错过了一些非常简单的东西,但不确定如何解决这个问题。欢迎任何建议/帮助/资源。

【问题讨论】:

    标签: python machine-learning hyperopt


    【解决方案1】:

    我不完全确定为什么,但我遇到了类似的问题,并且通过设置 njobs=1 就解决了。我认为这与 SMOTE 无法以并行方式运行有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-07
      • 2021-06-02
      • 2020-10-28
      • 2021-02-09
      • 2018-06-12
      • 2019-03-25
      • 2020-09-20
      • 2019-04-16
      相关资源
      最近更新 更多