【问题标题】:sklearn LogisticRegression without regularization没有正则化的sklearn LogisticRegression
【发布时间】:2014-10-15 03:57:03
【问题描述】:

sklearn 中的逻辑回归类带有 L1 和 L2 正则化。 如何关闭正则化以获得“原始”逻辑拟合,例如 Matlab 中的 glmfit? 我想我可以设置 C = large number 但我不认为这是明智的。

更多详情参见文档 http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

【问题讨论】:

  • 是的,您可以使用l2 惩罚并将C 参数设置为大。不惩罚有多大好处?如果您使用完全可分离的数据集执行此操作,那么权重将会发散。
  • 如果您想要没有正则化的最大似然解决方案,例如,如果您有大量数据并且您不担心过度拟合,这将是有益的。
  • 是否有经过良好测试的 Python 包可以执行常规逻辑回归?我觉得这就是@HananShteingart 正在寻找的东西。
  • 我相信 statsmodels API 在没有正则化的情况下进行逻辑回归 - 请参阅 stats.stackexchange.com/questions/203740/…

标签: python scikit-learn regression


【解决方案1】:

继续,将 C 设置为尽可能大。另外,请务必使用 l2,因为 l1 的实现速度可能会非常缓慢。

【讨论】:

  • 我试过C=1e42,为什么l1l2仍然给每个特征不同的系数?我有大约 100 个特征,尽管它们来自 l1l2 的系数是高度线性相关的,但仍然远非相同。我认为没有正则化,两者应该返回完全相同的系数。请问您知道造成这种差异的原因吗?
【解决方案2】:

是的,选择尽可能大的数字。在正则化中,代价函数包含一个正则化表达式,记住sklearn正则化中C参数是正则化强度的倒数。

C 在这种情况下是 1/lambda,条件是 C > 0。

因此,当C 接近无穷大时,lambda 接近 0。发生这种情况时,成本函数将成为您的标准误差函数,因为正则化表达式无论出于何种意图和目的都变为 0。

更新:在 sklearn 0.21 及更高版本中,您可以通过传入 penalty='none' 来禁用正则化。查看documentation here.

【讨论】:

  • 如果我想使用普通逻辑回归,C 需要多大?
  • @haneulkim 在旧版本的 sklearn 中,您不能全面禁用正则化,因此我们将 C 设置为一些大参数,例如 1e9。但我相信从0.21版本开始,你可以传入penalty='none'
【解决方案3】:

我得到了同样的问题,除了其他答案之外,我还尝试了答案:

如果将 C 设置为较大的值对您不起作用, 同时设置penalty='l1'

【讨论】:

  • 这不会禁用正则化。它使用套索正则化。
猜你喜欢
  • 2016-05-20
  • 2017-04-12
  • 2013-01-24
  • 2020-06-26
  • 2020-09-23
  • 2013-02-08
  • 2018-04-06
  • 2017-07-29
  • 2021-02-27
相关资源
最近更新 更多