【问题标题】:How to Turn Statsmodels Warning into Exception如何将 Statsmodels 警告变成异常
【发布时间】:2014-01-17 13:13:16
【问题描述】:

这里是 Python 和 Panda 新手。我正在尝试使用 statsmodels 来拟合逻辑回归来计算选民投票的概率。我在辖区一级工作;所以有时函数不收敛,我收到以下错误:警告:已超过最大迭代次数。

我已经将最大迭代次数增加到 1000 次。然后我尝试将“警告”变成异常。我已导入警告并包含 warnings.simplefilter('error', Warning) 以尝试捕获它,但它似乎不是真正的 Python 警告。相反,它是 statsmodels 在达到最大迭代次数时打印出来的。

所以现在我想知道是否有办法说:

if sm.Logit(y, covs).fit(maxiter=1000) doesn't converge:
    do something else

【问题讨论】:

    标签: python warnings statsmodels convergence


    【解决方案1】:

    编辑:您还可以检查返回结果类中的收敛标志,并在模型未收敛时自行引发此异常。例如,

    dta = sm.datasets.spector.load_pandas()
    
    y = dta.endog
    X = dta.exog
    X['const'] = 1
    
    mod = sm.Logit(y, X).fit()
    
    if not mod.mle_retvals['converged']:
        do something else
    

    确实,这些警告已打印出来。那是不好的形式。我提出了一个问题。对此欢迎 PR。

    https://github.com/statsmodels/statsmodels/issues/1281

    或者,尝试通过 method 关键字使用另一个求解器。希望他们会在途中提出适当的警告或异常。

    如果您可以在该问题上分享导致此问题的数据,那将很有帮助。可能还有其他事情发生。

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 2011-08-04
      • 2016-04-18
      • 2018-07-15
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2016-03-30
      • 2023-03-17
      相关资源
      最近更新 更多