matlab中solver函数_如何修复scikit-learn中的Future Warning

作者:JasonBrownlee

原文链接:https://machinelearningmastery.com/how-to-fix-futurewarning-messages-in-scikit-learn/

翻译:阳光和鱼

在运行代码时,通过使用Future Warning信息报告scikit-learn库即将进行的更改。

初学者可能会对警告信息感到困惑,因为看起来代码有问题或者他们做错了什么。警告消息也不便于编写代码,因为它们可能掩盖错误和程序输出。

处理警告消息的方法有很多,包括忽略消息禁止警告修复代码

在本教程中,您将发现scikit-learnAPI中的Future Warning信息,以及如何在您自己的机器学习项目中处理它们。

完成本教程后,您将知道:

  • Futurewarning消息旨在通知您scikit-learnAPI中的参数的缺省值即将发生的更改;
  • 可以忽略或消除Futurewarning消息,因为它们不会终止程序的继续执行;
  • 了解Futurewarning消息的示例,以及如何解释消息和更改代码,以处理即将到来的更改。

了解如何使用pandas准备数据、使用scikit-learn优化和评估模型,以及在我的新书中的更多内容,包括16个逐步教程、3个项目和完整的python代码。

教程概述

本教程分为四个部分:

  • Future Warnings问题
  • 如何消除Future Warnings
  • 如何修复Future Warnings
  • 关于Future Warnings的建议

Future Warnings问题

Scikit-learn库是一个开源库,它为数据准备和机器学习算法提供了工具。这是一个广泛使用和不断更新的库。像许多积极维护的软件库一样,Scikit-learnAPI经常会随着时间的推移而改变。这可能是因为发现了更好的实践或者首选的使用模式发生了变化。

Scikit-learnAPI中提供的大多数函数都有一个或多个参数,可以自定义函数的行为。许多参数具有合理的缺省值,因此你不必为参数指定值。当你刚开始学习机器学习或者scikit-learn的时候,你不知道每个参数有什么影响,这一点尤其有帮助。

随着时间的推移,对scikit-learnAPI的更改通常表现为对函数参数的合理默认值的更改。此类型的更改通常不会立即执行,而是有计划地执行。

例如,如果您的代码是为scikit-learn库的前一个版本编写的,并且依赖于函数参数的默认值,而API的后续版本计划更改这个默认值,那么API将提醒您即将发生的更改。

这个警告在每次运行代码时以警告消息的形式出现。具体来说,“Future Warning”是在标准错误上报告的(例如在命令行上)。

这是API和项目的一个有用特性,为您的利益而设计。它允许你为库的下一个主要版本更改代码,以保留旧的行为(为参数指定一个值)或采用新的行为(不更改代码)。

运行时报告警告的Python脚本可能会令人沮丧。

  • 对于初学者来说,可能会觉得代码没有正确工作,或者自己做错了什么;
  • 对于专业人士来说,这是一个需要更新的程序的标志;

在任何一种情况下,警告消息都可能掩盖真正的错误消息或程序的输出。

如何消除Future Warnings

警告消息不是错误消息

因此,程序报告的警告消息(如Future Warning)不会停止程序的执行。警告消息将被报告,而程序将继续执行。

因此(如果您愿意)可以在每次执行代码时忽略该警告。

还可以通过编程方式忽略警告消息。这可以通过在程序运行时禁止警告消息来实现。

这可以通过将Python警告系统显式配置为忽略特定类型的警告消息(例如忽略所有Future Warnings)来实现,或者更广泛地说,忽略所有警告(不建议)。

可以通过在你的将产生警告的代码周围添加以下代码块来实现:

# run block of code and catch warnings
with warnings.catch_warnings():
    # ignore all caught warnings
    warnings.filterwarnings("ignore")
    # execute code that will generate warnings
    ...

或者,如果您有一个非常简单的平面脚本(没有函数或块),您可以通过在文件顶部添加两行来禁用所有Future Warnings:

# import warnings filter
from warnings import simplefilter
# ignore all future warnings
simplefilter(action='ignore', category=Future Warning)

要了解Python中消除警告的更多信息,请参见:

  • Python Warning control API

如何修复Future Warnings

您也可以更改代码来处理所报告的对scikit-learnAPI的更改。

通常,警告消息本身会告诉您更改的性质,以及如何更改代码以处理警告。

尽管如此,让我们来看看最近一些关于未来警告的例子。

本节中的示例是用scikit-learn版本0.20.2开发的。你可以通过运行以下代码来检查你的scikit-learn版本:

# check scikit-learn version
import sklearn
print('sklearn: %s' % sklearn.__version__)

你会看到如下输出:

sklearn: 0.20.2

随着时间的推移,scikit-learn的新版本发布,报告的警告消息的性质将发生改变,并采用新的默认设置。

因此,尽管下面的示例是针对scikit-learn版本的,但是诊断和处理每个API性质变化的方法提供了处理未来变化的好示例。

逻辑回归的未来警告

Logisticregression算法最近对默认参数值进行了两次更改,这些更改导致了Future Warning信息。

第一个与求解系数有关,第二个与如何使用模型进行多类分类有关。让我们用代码示例来看一下每个例子。

对规划求解器(Solver)参数的更改

下面的示例将生成一个关于LogisticRegression使用的solver参数的Future Warning。

# example of LogisticRegression that generates a Future Warning
from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression
# prepare dataset
X, y = make_blobs(n_samples=100, centers=2, n_features=2)
# create and configure model
model = LogisticRegression()
# fit model
model.fit(X, y)

运行该示例会产生以下警告消息:

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

这个问题涉及到从过去默认的‘solver’参数改为‘libllinear’,并且在未来的版本中将改为默认的‘lbfgs’。现在必须指定“solver”参数。

为了保持原来的行为,可以将参数指定如下:

# create and configure model
model = LogisticRegression(solver='liblinear')

为了支持新的行为(推荐),您可以将参数指定如下:

# create and configure model
model = LogisticRegression(solver='lbfgs')

对多类别(multi_class)参数的更改

下面的例子将生成一个关于LogisticRegression使用的“multiclass”参数的未来警告。

# example of LogisticRegression that generates a Future Warning
from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression
# prepare dataset
X, y = make_blobs(n_samples=100, centers=3, n_features=2)
# create and configure model
model = LogisticRegression(solver='lbfgs')
# fit model
model.fit(X, y)

运行该示例会产生以下警告消息:

Future Warning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.

这个警告信息仅仅影响了对多类分类问题使用Logit模型分类,而不是该方法设计的二进制分类问题。

多类参数的默认值从‘ovr’改为‘auto’。

为了保持原来的行为,可以将参数指定如下:

# create and configure model
model = LogisticRegression(solver='lbfgs', multi_class='ovr')

为了支持新的行为(推荐) ,您可以按照以下方式指定参数:

# create and configure model
model = LogisticRegression(solver='lbfgs', multi_class='auto')

支持向量机(SVM)的Future Warning

支持向量机最近对gamma参数进行了修改,导致了一个警告消息,特别是SVC和SVR classes。

下面的例子将生成一个关于SVC使用的‘gamma’参数的Future Warning,但同样适用于SVR。

# example of SVC that generates a Future Warning
from sklearn.datasets import make_blobs
from sklearn.svm import SVC
# prepare dataset
X, y = make_blobs(n_samples=100, centers=2, n_features=2)
# create and configure model
model = SVC()
# fit model
model.fit(X, y)

运行这个示例将生成以下警告消息:

Future Warning:Thedefaultvalueofgammawillchangefrom'auto'to'scale'inversion0.22toaccountbetterforunscaledfeatures.Setgammaexplicitlyto'auto'or'scale'toavoidthiswarning.

此警告信息报告说,“gamma”参数的默认值正在从“auto”的当前值改为新的默认值“scale”。

gamma参数只影响使用RBF、多项式或Sigmoid核的SVM模型。

该参数控制算法中使用的“gamma”系数的值,如果您没有指定一个值,则使用启发式算法指定该值。该警告是关于计算默认值的方式的改变。

为了保持原来的行为,可以将参数指定如下:

# create and configure model
model = SVC(gamma='auto')

为了支持新的行为(推荐),您可以将参数指定如下:

# create and configure model
model = SVC(gamma='scale')

决策树集成算法的未来预警

基于决策树的集成算法将改变集成中子模型或树的数量,这些子模型或树是由n估计量的论点控制的。

这影响了随机森林和 extra trees模型进行分类和回归,特别是分类:RandomForestClassifier, RandomForestRegressor, ExtraTreesClassifier, ExtraTreesRegressor, and RandomTreesEmbedding

下面的例子将生成一个关于随机森林分类器使用的‘n_estimators'参数的FutureWarning,但同样适用于随机森林回归分类器和额外的树类。

# example of RandomForestClassifier that generates a FutureWarning
from sklearn.datasets import make_blobs
from sklearn.ensemble import RandomForestClassifier
# prepare dataset
X, y = make_blobs(n_samples=100, centers=2, n_features=2)
# create and configure model
model = RandomForestClassifier()
# fit model
model.fit(X, y)

运行这个示例将生成以下警告消息:

FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.

这个警告信息报告说子模型的数量正在从10个增加到100个,可能是因为计算机变得越来越快,10个非常小,甚至100个也很小。

为了保持原来的行为,可以将参数指定如下:

#createandconfiguremodel
model=RandomForestClassifier(n_estimators=10)

为了支持新的行为(推荐),您可以将参数指定如下:

#createandconfiguremodel
model=RandomForestClassifier(n_estimators=100)

更多的Future Warnings问题

你是否在为Future Warnings而挣扎?请在下面的评论中告诉我,我会尽我所能帮助你。

Future Warnings建议

一般来说,我不建议忽略或消除警告消息。

忽略警告消息意味着该消息可能掩盖了真正的错误或程序输出,而API未来的更改可能会对您的程序产生负面影响,除非您已经考虑过这些问题。

对于研发工作来说,消除警告可能是一个快速解决方案,但是不应该在生产系统中使用。比简单地忽略消息更糟糕的是,消除警告还可能消除来自其他api的消息。

相反,我建议您修复软件中的警告消息。

应该如何更改代码?

一般来说,我建议几乎总是采用API的新行为,例如新的默认行为,除非您明确依赖函数的先前行为。

对于长期运行的操作或生产代码,显式指定所有函数参数而不使用默认值可能是一个好主意,因为它们在将来可能会发生更改。

我还建议您更新scikit-learn库,并跟踪每个新版本中对API的更改。

最简单的方法是查看每个版本的发行说明,可以在这里找到:

  • scikit-learnReleaseHistory

进一步阅读

如果您希望深入了解,本节将提供更多关于这个主题的资源。

  • Python Warning control API
  • sklearn.linear_model.LogisticRegression API
  • sklearn.svm.SVC API - sklearn.svm.SVR API
  • scikit-learn Release History
要使用scikit-learn进行逻辑回归的训练,可以按照以下步骤进行操作: 1. 导入所需的库和模块:首先需要导入scikit-learn的逻辑回归模块。可以使用以下代码导入: ```python from sklearn.linear_model import LogisticRegression ``` 2. 准备数据集:接下来,需要准备用于训练的数据集。将数据集拆分为特征矩阵X和目标变量y。确保数据集已经经过预处理和特征工程。 3. 创建逻辑回归模型对象:使用LogisticRegression()函数创建一个逻辑回归模型对象。可以根据需要设置模型的参数,比如正则化参数C、求解器solver等。 4. 训练模型:使用fit()函数将数据集(X, y)传入模型对象,进行模型的训练。该函数将自动拟合逻辑回归模型,并根据提供的数据进行参数估计。 5. 进行预测:训练完成后,可以使用训练好的模型进行预测。使用predict()函数,将测试集或新样本的特征矩阵X传入模型对象,得到预测结果。 下面是一个示例代码,展示了如何使用scikit-learn进行逻辑回归的训练和预测: ```python from sklearn.linear_model import LogisticRegression # 准备数据集 X_train = ... y_train = ... X_test = ... # 创建逻辑回归模型对象 model = LogisticRegression() # 训练模型 model.fit(X_train, y_train) # 进行预测 y_pred = model.predict(X_test) ``` 这样,你就可以使用scikit-learn的逻辑回归模块进行训练和预测了。请注意,在实际应用,还需要进行模型评估、参数调优等步骤来提高模型性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [机器学习之PyTorch和Scikit-Learn第3章 使用Scikit-Learn的机器学习分类器之旅Part 1](https://blog.csdn.net/ardor123/article/details/130378951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值