【问题标题】:How to detect a Scikit-learn warning programmatically如何以编程方式检测 Scikit-learn 警告
【发布时间】:2018-06-14 12:26:37
【问题描述】:

在使用sklearn.neural_network.MLPClassifier 拟合模型时,我有时会收到控制台中打印的警告:

ConvergenceWarning:随机优化器:达到最大迭代次数 (300),优化尚未收敛。

有没有办法在运行时检测到警告以便我可以采取行动?

【问题讨论】:

    标签: python python-3.x scikit-learn


    【解决方案1】:

    您可以使用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)
    
    ...
    

    【讨论】:

    • 警告是 API 的一部分吗?文档似乎没有保证警告在整个版本中保持不变,所以这种方法对我来说似乎有点脆弱。
    【解决方案2】:

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

    【讨论】:

    • 您可以从块内的哪个对象/类获得n_iter?一些代码会有所帮助。
    • 这个答案不正确。例如,AffinityPropagation 可以提前停止,发出警告并返回一些任意结果而无需实际收敛。
    猜你喜欢
    • 2014-02-21
    • 2019-06-04
    • 1970-01-01
    • 2015-12-13
    • 2018-01-18
    • 2013-12-03
    • 2021-03-24
    • 2019-03-24
    • 2014-06-25
    相关资源
    最近更新 更多