python-3.x 如何以编程方式检测Scikit-learn警告

2exbekwf  于 2023-01-06  发布在  Python
关注(0)|答案(3)|浏览(156)

使用sklearn.neural_network.MLPClassifier拟合模型时,我有时会收到控制台中打印的警告:
收敛警告:随机优化器:已达到最大迭代次数(300),优化尚未收敛。
是否有一种方法可以在运行时检测到警告,以便我可以对它采取行动?

zf2sa74q

zf2sa74q1#

您可以使用warnings.catch_warnings实时捕获警告

import warnings

with warnings.catch_warnings()
    warnings.filterwarnings('error')
    try:
        model.fit(X, y)
    except Warning:
        # do something in response

这个结构将捕捉任何警告,并允许你以你认为合适的方式响应它。在这种情况下,可能会修改一些超参数,使模型更容易收敛。
也可以使用warnings.filterwarnings忽略警告,并指定要忽略的警告类型。
要忽略ConvergenceWarning

from sklearn.execpetions import ConvergenceWarning

warnings.filterwarnings('ignore', category=ConvergenceWarning)

...
5q4ezhmt

5q4ezhmt2#

拟合后检查n_iter_属性,如果小于配置的最大迭代次数(max_iter),则收敛。

0sgqnhkj

0sgqnhkj3#

假设你想要训练scikit-learn模型,并且希望能够存储警告(如果有的话),那么你可以按照如下方式拟合模型:
第一个月
如果你想捕捉到这个警告,那么你可以运行这个模型:

with warnings.catch_warnings(record=True) as caught_warnings:
    clf.fit(X_train, y)

最后,您可以通过迭代caught_warnings来获得警告,如下所示:

for warn in caught_warnings:
    print(warn)

相关问题