0

我正在尝试在 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

我怎么解决这个问题?

4

1 回答 1

0

我通过从空间中删除类权重参数解决了这个问题。

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))
}
于 2020-05-26T05:17:56.553 回答