如何修复 Statsmodel 警告:“已超过最大迭代次数”

dav*_*ave 10 python warnings statsmodels anaconda logistic-regression

我正在使用 Anaconda 并且我正在尝试逻辑回归。加载训练数据集并执行回归后。然后我收到以下警告消息。

train_cols = data.columns[1:]
logit = sm.Logit(data['harmful'], data[train_cols])
result = logit.fit() 
Warning: Maximum number of iterations has been exceeded.
     Current function value: 0.000004
     Iterations: 35
C:\Users\dell\Anaconda\lib\site-packages\statsmodels\base\model.py:466: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals"Check mle_retvals", ConvergenceWarning)
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此警告以及如何解决此问题?谢谢!

Jos*_*sef 10

有两种可能

1)困难优化问题:通常Logit收敛很快,默认迭代次数设置的很低。在大多数情况下,在对先前结果maxiter的调用fit或重新拟合中添加更大的关键字是有start_params帮助的。

2)既然是Logit,就有可能存在完全分离,或者准完全分离。在这种情况下,某些参数可能会变为无穷大,并且优化会在某个收敛或停止标准处停止。Logit 检测完全分离的简单情况并引发异常,但可能存在未检测到的部分分离。通过完美分离,您可以对某些或所有情况获得完美的可预测性,这对预测很有用,但会导致估计和识别参数时出现问题。更多信息例如在这里https://stats.stackexchange.com/questions/11109/how-to-deal-with-perfect-separation-in-logistic-regression 还有几个关于角落的 statsmodels github 问题的常见问题解答像这样的案例和问题。


小智 5

检查所有变量的水平。其中一个可能几乎拥有某一类别的 99%。因此很难收敛。我通过从数据集中删除该变量来解决这个问题。