如何修复Statsmodel警告:“最大值没有。迭代次数超过“

问题描述 投票:4回答:2

我正在使用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)

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

python warnings anaconda logistic-regression statsmodels
2个回答
4
投票

有两种可能性

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问题也有几个FAQ问题。


0
投票

检查所有变量的级别。它们中的一个可能有一个类别的近99%。因此难以收敛。我通过从我的数据集中删除该变量来解决它。

© www.soinside.com 2019 - 2024. All rights reserved.