GridSearchCV的LogisticRegression无法收敛

时间:2020-10-04 17:21:28

标签: python optimization scikit-learn regression grid-search

我正在寻找逻辑回归的最佳参数,但是我发现“最佳估计量”并没有收敛。

是否有一种方法可以指定估算器需要收敛才能考虑在内?

这是我的代码。

# NO PCA
cv = GroupKFold(n_splits=10)
pipe = Pipeline([('scale', StandardScaler()),
    ('mnl', LogisticRegression(fit_intercept=True, multi_class="multinomial"))])

param_grid = [{'mnl__solver': ['newton-cg', 'lbfgs','sag', 'saga'],
               'mnl__C':[0.5,1,1.5,2,2.5],
               'mnl__class_weight':[None,'balanced'],
              'mnl__max_iter':[1000,2000,3000],
              'mnl__penalty':['l1','l2']}]

grid = GridSearchCV(estimator = pipe, param_grid=param_grid, scoring=scoring, n_jobs=-1, refit='neg_log_loss', cv=cv, verbose=2, return_train_score=True)

grid.fit(X, y, groups=data.groups)


# WITH PCA
pipe = Pipeline([(
    ('scale', StandardScaler()),
    ('pca', PCA())
    ('mnl', mnl)])

param_grid = [{'pca__n_components':[None,15,30,45,65]
            'mnl__solver': ['newton-cg', 'lbfgs','sag', 'saga'],
              'mnl__max_iter':[1000,2000,3000],
             'mnl__C':[0.5,1,1.5,2,2.5],
              'mnl__class_weight':[None,'balanced'],
              'mnl__penalty':['l1','l2']}]

grid = GridSearchCV(estimator = pipe, param_grid=param_grid, scoring='neg_log_loss', n_jobs=-1, refit=True, cv=cv, verbose=2)

grid.fit(X, y, groups=data.groups)

在第一种情况下,发现的最佳估计量是使用l2-lbfgs求解器,经过1000次迭代,并且收敛。第二个方法是找到的最佳估计器,它是使用saga求解器和l1罚函数进行的3000次迭代。我觉得这与求解器有关...但是无论如何,是否有一种简单的方法可以说明它必须收敛才能接受为最佳算法?

0 个答案:

没有答案