Python使用逻辑回归提示FutureWarning: Default solver will be changed to ‘lbfgs‘ in 0.22. Specify a solver to

本文解析了在Python中使用sklearn库的Logistic回归模型时遇到的FutureWarning警告,并提供了指定solver参数来消除警告的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Python中利用Logistic回归算法进行数据建模,本来算是比较常见的事情,但结果“阴沟里翻船”,一上来就遇到了报警提示。

在PyCharm中,使用python的sklearn.linear_model.LogisticRegression进行实例化时model=LogisticRegression(),就提示了以下警告信息:

FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning。

虽然警告信息并不影响代码运行,但输出窗口异常明显的几行红字提醒,我总觉得代码的心里也不会很爽快。

问题分析:

FutureWarning是语言或者库中将来可能改变的有关警告。

根据报警信息和参考相关文档,“Default will change from 'liblinear' to 'lbfgs' in 0.22.”,默认的solver参数在0.22版本中,将会由“liblinear”变为“lbfgs”,且指定solver参数可以消除该warning。

这是代码在发出警告,将来代码运行时如果没有及时关注到版本的问题,可能solver的参数会发生改变。所以,最安全的方法并不是通过ignore消除警告,而是指定一个solver参数。

参阅官方文档:

solver : str, {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, \default: 'liblinear'.

        Algorithm to use in the optimization problem.

        - For small datasets, 'liblinear' is a good choice, whereas 'sag' and

          'saga' are faster for large ones.

        - For multiclass problems, only 'newton-cg', 'sag', 'saga' and 'lbfgs'

          handle multinomial loss; 'liblinear' is limited to one-versus-rest

          schemes.

        - 'newton-cg', 'lbfgs' and 'sag' only handle L2 penalty, whereas

          'liblinear' and 'saga' handle L1 penalty.

LogisticRegerssion算法的solver仅支持以下几个参数'liblinear', 'newton-cg', 'lbfgs', 'sag', 'saga'。

解决方法:

传入参数后即可消除警告:model=LogisticRegression(solver=’liblinear’)  。

扩展

其他消除警告的方法:

import warnings

warnings.filterwarnings("ignore")

                                                如果觉得内容不错,请扫码关注微信公众号,获取更多内容

                                        

### FutureWarning 多分类参数处理 在机器学习库 `scikit-learn` 中,关于 `multi_class` 参数的警告通常涉及其默认行为的变化以及未来版本中的移除计划。具体来说,在某些模型(如逻辑回归 `LogisticRegression` 或线性支持向量机 `LinearSVC`)中,`multi_class='multinomial'` 是一种常见的设置选项。 #### 警告背景 从 scikit-learn 版本 1.5 开始,`multi_class` 参数的行为可能会发生变化,并且预计将在未来的版本(例如 1.7)中完全移除当前的一些默认值或选项[^6]。因此,为了确保代码在未来版本中仍然兼容并避免潜在问题,建议显式指定该参数而不是依赖默认值。 --- ### 解决方案 以下是针对此问题的具体解决方法: 1. **显式声明 `multi_class` 参数** 如果正在使用的模型允许配置 `multi_class` 参数,则应始终将其显式定义为 `'ovr'` 或 `'multinomial'`,以防止因默认值更改而导致意外行为。 ```python from sklearn.linear_model import LogisticRegression model = LogisticRegression(multi_class='multinomial', solver='lbfgs') ``` 这里需要注意的是,当选择 `multi_class='multinomial'` 时,必须搭配合适的求解器(solver),比如 `'lbfgs'`, `'newton-cg'`, `'sag'`, 或 `'saga'`,因为这些求解器支持多项式损失函数[^7]。 2. **升级到最新版本** 确保所使用的 scikit-learn 库是最新的稳定版。较新版本可能已经修复了与此相关的警告信息,并提供了更清晰的文档说明。 使用以下命令更新至最新版本: ```bash pip install --upgrade scikit-learn ``` 3. **忽略特定警告** 如果确认不会影响程序功能,可以通过过滤掉此类警告来简化日志输出。可以采用如下方式屏蔽 `FutureWarning` 类型的消息: ```python import warnings warnings.filterwarnings("ignore", category=FutureWarning) ``` 需要注意的是,这种方法仅适用于临时抑制警告而不改变实际实现逻辑的情况。 4. **检查其他依赖项** 对于复杂的项目环境,有时第三方库也会间接触发类似的警告消息。如果发现即使调整了自己的代码仍存在未消除的警告,请核查是否有外部模块需要同步更新。 --- ### 示例代码 下面是一个完整的例子展示如何正确初始化带有 `multi_class` 设置的逻辑回归模型: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression import warnings # 数据准备 data = load_iris() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3, random_state=42) # 显式设定 multi_class 和 solver 参数 model = LogisticRegression( multi_class='multinomial', solver='lbfgs' ) # 训练模型 model.fit(X_train, y_train) # 输出预测结果 print(model.predict(X_test)) ``` 通过上述修改即可有效规避由 `multi_class` 默认值变更引发的相关警告。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

199铱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值