scikit-learn 逻辑回归求解器中的 FutureWarning

FutureWarning in scikit-learn Logistic Regression solver

我一直在使用 Udemy 上的课程来学习机器学习。我发现了很多已弃用的代码,现在我遇到了这个问题:

代码:

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state = 0)
classifier.fit(X_train, y_train)

警告:

C:\Users\admin\Anaconda3\lib\site-packages\sklearn\linear_model\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.
  FutureWarning)

我怎样才能摆脱这个弃用警告?

嗯,警告信息告诉你了。您需要做的就是明确指定要使用的求解器:

classifier = LogisticRegression(random_state = 0, solver='lbfgs')

(或您要使用的任何其他求解器)

有关可用选项,请参阅 the sklearn docs

尝试使用

classifier = LogisticRegression(random_state=0, solver="liblinear")

并检查文档中的求解器参数:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

在您可能使用的 scikit-learn v0.20 中,LogisticRegression 中使用的 solver 的默认值为 liblinear;来自 docs:

solver : str, {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}, default: ‘liblinear’.

这在 v0.22(当前最新)更改为 lbfgs

因此,为了避免此更改带来的惊喜,scikit-learn 会在默认情况下警告您此更改 出现在未来的版本中,以保持您的代码面向未来。

要摆脱它,只需在 LogisticRegression 定义中明确定义一个求解器,即

classifier = LogisticRegression(random_state = 0, solver='lbfgs') # default in v0.22

classifier = LogisticRegression(random_state = 0, solver='liblinear') # default until v0.21

上面提供的第一个文档 link 显示了所有可用选项,以及每个选项的一些简短 comment/advice。