使用 Hyperopt 进行逻辑回归时无法腌制模块对象

Can't pickle a module object while using Hyperopt for Logistic Regression

我正在尝试在 Python 中使用 Hyperopt 微调逻辑回归。请在下面找到优化功能:

def objective(params, n_folds = N_FOLDS):
    """Objective function for Logistic Regression Hyperparameter Tuning"""

    # Perform n_fold cross validation with hyperparameters
    # Use early stopping and evaluate based on ROC AUC

    clf = LogisticRegression(**params,random_state=0,verbose =0)
    cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
    score = cross_val_score(clf, X_train, y_train, cv=cv, scoring='f1_macro')

    # Extract the best score
    best_score = max(score)

    # Loss must be minimized
    loss = 1 - best_score

    # Dictionary with information for evaluation
    return {'loss': loss, 'params': params, 'status': STATUS_OK}

当 运行 算法时,它向我显示以下错误。

TypeError: can't pickle module objects

TypeError                                 Traceback (most recent call last)
<ipython-input-22-934e4c484469> in <module>
      6 
      7 # Optimize
----> 8 best = fmin(fn = objective, space = space, algo = tpe.suggest, max_evals = MAX_EVALS, trials = bayes_trials)

<ipython-input-20-d9ea5e676676> in objective(params, n_folds)
      7     clf = LogisticRegression(**params,random_state=0,verbose =0)
      8     cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
----> 9     score = cross_val_score(clf, X_train, y_train, cv=cv, scoring='f1_macro')
      10 
      11     # Extract the best score

我该如何解决这个问题?

我已经通过从 space 中删除 class 权重参数解决了这个问题。

space = {

    'warm_start' : hp.choice('warm_start', [True, False]),
    'fit_intercept' : hp.choice('fit_intercept', [True, False]),
    'tol' : hp.uniform('tol', 0.00001, 0.0001),
    'C' : hp.uniform('C', 0.05, 3),
    'solver' : hp.choice('solver', ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga']),
    'max_iter' : hp.choice('max_iter', range(5,1000))
}