【问题标题】:logistic regression using statsmodels error in python在python中使用statsmodels错误进行逻辑回归
【发布时间】:2017-11-05 13:10:48
【问题描述】:

我正在尝试使用 statsmodels 实现逻辑回归(我需要摘要),但出现此错误:

LinAlgError: Singular matrix

我的 df 是数字和相关的,我删除了非数字和常量特征。 由于相关特征,我尝试实现常规回归以及带有 l1 惩罚(l2 不可用)的回归。

我试图检查矩阵秩并得到这个打印:

print(len(df.columns)) -> 156

print(np.linalg.matrix_rank(df.values)) -> 151

我如何知道哪些功能存在问题以及为什么存在问题?

我的代码:

logit = sm.Logit(y,X)

result = logit.fit_regularized(trim_mode='auto', alpha=0,maxiter=150)

print(result.summary())

更新:

删除高度相关的特征后,我得到:

  len(df.columns) =  np.linalg.matrix_rank(df.values)

但仍然是同样的错误。 (即使我设置了较低的相关阈值)。

我也尝试更改求解器。

【问题讨论】:

  • 试试 df.corr() - 这会返回数据框中数字列之间的相关矩阵。从中您可以检查您的任何两个特征是否完全相关。
  • @Johannes Wachs ,我删除了相关的功能并且它有效。 tnx.
  • 请参阅stackoverflow.com/a/13313828/333700,了解如何使用 QR 查找所有共线或线性独立的列

标签: python matrix logistic-regression summary matrix-inverse


【解决方案1】:

正如 cmets 中所建议的,如果两个特征完全相关,则模型将不会运行。如果您有一个包含少量列的 pandas 数据框,最简单的检查方法是在您的数据框上调用 .corr() method - 在本例中为 df.corr(),并检查是否有任何一对特征具有相关性 =1。

您确实应该考虑一下为什么某些功能是完全相关的。

【讨论】:

  • 还有别的原因吗?我刚刚删除了 0.4 corr 及以上的所有功能,我得到了同样的错误......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 2015-04-18
相关资源
最近更新 更多