我正在寻找逻辑回归的最佳参数,但是我发现“最佳估计量”并没有收敛。
是否有一种方法可以指定估算器需要收敛才能考虑在内?
这是我的代码。
# 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次迭代。我觉得这与求解器有关...但是无论如何,是否有一种简单的方法可以说明它必须收敛才能接受为最佳算法?