我正在使用GridSearchCV优化SVM的超参数。我设置了最大迭代次数,因为我迫不及待要几个小时才能得到结果。我知道会有收敛警告。我只是 想忽略这些警告而不显示在终端中。
谢谢。
答案 0 :(得分:2)
这很难找到答案,因为我看到的所有建议答案都行不通。最终对我有用的是示例代码Early stopping of Stochastic Gradient Descent:
from sklearn.utils.testing import ignore_warnings
from sklearn.exceptions import ConvergenceWarning
然后您可以像这样对函数进行注释:
@ignore_warnings(category=ConvergenceWarning)
def my_function():
# Code that triggers the warning
请注意,您无需直接从warnings
导入任何内容。
我认为这很好,因为它只会在您需要的特定情况下而不是全局地抑制警告。
答案 1 :(得分:1)
我将在这里远射。
您没有提供足够的信息。您刚刚提到您正在使用SVM
,但没有使用哪种类型的SVM
,因为它有许多实现,例如SVC
,NuSVC
和LinearSVC
。这些不同的类型具有不同的属性。
为什么要护理?因为其中有些支持/接受并行执行任务,例如LinearSVC
!
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=ConvergenceWarning)
上面的代码(或它的其他变体)应该可以完成这项工作,但是如果它是并行运行的,那么它只会在第一次运行/迭代时就可以做到(我不太清楚为什么会这样做,但是似乎每一项工作具有自己的Pythonic配置,就好像它是新实例一样!)
此外,您提到您正在使用同时具有GridSearchCV
参数的n_job
。其Scikit
文档说:
要并行运行的作业数。除非在 joblib.parallel_backend上下文。 -1表示使用所有处理器
joblib.parallel_backend
表示在估算器或任何按定义的配置中设置的作业数量。
并行运行作业可能是未取消显示警告的原因。需要来自OP的更多信息。
我再次检查了它,确实使用了GridSearchCV
版本{strong> 0.20.3 和 low scikit-learn
在抑制警告的同时会导致以下结果:
max_iter
+ SVC or LinearSVC
:无法抑制警告。GridSearchCV(n_jobs=-1 or >1)
+ SVC or LinearSVC
:抑制警告成功 。GridSearchCV(n_jobs=None or 1)
+ LogisticRegression(n_jobs=-1, solver='sag')
:无法抑制警告。GridSearchCV(n_jobs=None or 1 or >1 or -1)
+ LogisticRegression(n_jobs=1, solver='sag')
:无法抑制警告。GridSearchCV(n_jobs=-1 or >1)
+ LogisticRegression(n_jobs=1, solver='sag')
:抑制警告成功 。如您所见,如果估算器支持多个作业,则无论GridSearchCV(n_jobs=None or 1)
中的n_jobs=-1 or >1
为何,设置n_jobs
都不会抑制警告。另一方面,如果估算器不支持多作业,则在GridSearchCV
中设置n_jobs=-1 or >1
不会使警告抑制起作用,但是,设置GridSearchCV
会使它起作用。>
重要提示
这是我在n_jobs=None or 1
版本 0.20.3 中发现的,但是,我在另一台scikit-learn
版本 0.19.2 的笔记本电脑上尝试了strong>和抑制警告始终有效,无论如何!我检查了scikit-learn
的GitHub存储库,并注意到自{0.19.2版本以来,有关scikit-learn
的一些提交,但是我不确定是否存在导致上述行为的真正更改/更新!您可能要在那打开一张票,并参考以上结果。
我可以禁止所有joblib
警告的唯一方法是在模块的开头发出以下代码。 (但请注意,这将禁止所有警告,包括您的警告-我需要这样做,因为我已将日志保存到数据库中):
Scikit-learn
答案 2 :(得分:0)
尝试一下:
from warnings import filterwarnings
filterwarnings('ignore')
答案 3 :(得分:0)
这对我有用:
来自sklearn.exceptions的导入ConvergenceWarning ConvergenceWarning('ignore')
答案 4 :(得分:0)
为了控制Python警告,您可以使用警告库。 请参阅详细的documentation here。 因此,您可以使用warning.simplefilter()方法,如下所示:
Dim logo As Picture
Set logo = ThisWorkbook.Sheets("Sheet1").Pictures("Picture1")