如何将Statsmodels警告变为异常

时间:2013-12-30 16:08:54

标签: python warnings statsmodels convergence

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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关键字使用其他解算器。希望他们在途中能够提出正确的警告或例外。

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