【问题标题】:Modelling probabilities in a regularized (logistic?) regression model in pythonpython中正则化(逻辑?)回归模型中的概率建模
【发布时间】:2016-02-24 01:17:37
【问题描述】:

我想为概率拟合回归模型。我知道线性回归通常用于此目的,但我有几个概率在 0.0 和 1.0 或接近 0.0 和 1.0,并且希望拟合一个回归模型,其中输出被限制在 0.0 和 1.0 之间。我希望能够为模型指定正则化规范和强度,理想情况下在 python 中执行此操作(但 R 实现也会有帮助)。我发现的所有逻辑回归包似乎只适合分类,而这是一个回归问题(尽管我想使用 logit 链接函数)。我使用 scikits-learn 来满足我的分类和回归需求,所以如果这个回归模型可以在 scikits-learn 中实现,那就太棒了(在我看来这是不可能的),但我对任何解决方案都很高兴python 和/或 R.

【问题讨论】:

  • statsmodels 具有 L1 正则化 Logit,GLM 的弹性网络处于拉取请求中,将很快合并。在接下来的几个月中,将根据仍需要工作的拉取请求,对 GLM 和样条进行 L2 惩罚等更多惩罚 GLM。
  • scikit-learn 还具有 L1 和 L2 惩罚的逻辑回归,AFAIK。
  • 澄清您实际拥有的数据的问题:因变量是概率/分数/比例(在 (0, 1) 中浮动)还是二元变量? statsmodels 中的二元和二项式模型不会强制因变量是二元的,只要它在 [0,1] 区间内就可以工作。
  • @user33700 谢谢!因变量是概率/分数/比例(在 (0, 1) 中的浮点数),而不是二元变量。这适用于statsmodel吗?你能指出一些示例语法吗?
  • @Adrian scikit-learn 不久前不允许使用非整数,但我不知道最近的版本是否有所改变。

标签: scikit-learn regression linear-regression logistic-regression statsmodels


【解决方案1】:

这个问题有两个问题,惩罚估计和分数或比例数据作为因变量。我分别处理了每一个,但从未尝试过组合。

处罚

Statsmodels 拥有 L1 正则化 Logit 和其他离散模型(如 Poisson)已有一段时间了。近几个月来,已经做出了很多努力来支持更多的惩罚,但它还没有出现在 statsmodels 中。用于线性和广义线性模型 (GLM) 的弹性网络处于拉取请求中,将很快合并。在接下来的几个月中,将根据仍需要工作的拉取请求,对 GLM 和样条进行 L2 惩罚或 SCAD 惩罚等更多惩罚 GLM。

Logit 的当前 L1 fit_regularized 的两个示例在这里 Difference in SGD classifier results and statsmodels results for logistic with l1https://github.com/statsmodels/statsmodels/blob/master/statsmodels/examples/l1_demo/short_demo.py
请注意,惩罚权重 alpha 可以是一个向量,对于像常数这样的系数,如果它们不应该受到惩罚,则为零。

http://www.statsmodels.org/dev/generated/statsmodels.discrete.discrete_model.Logit.fit_regularized.html

分数模型

statsmodels 中的二元和二项式模型不会强制因变量是二元的,只要因变量在 [0,1] 区间内就可以工作。

可以使用 Logit 作为准最大似然估计量来估计分数或比例。如果正确指定了平均函数、逻辑、累积正态或类似链接函数,则估计值是一致的,但我们应该使用稳健的三明治协方差来进行正确的推理。可以通过 fit 关键字 cov_type='HC0' 在 statsmodels 中获得稳健的标准误差。 最好的文档是 Stata http://www.stata.com/manuals14/rfracreg.pdf 和其中的参考资料。在 Stata 使用 fracreg 之前,我浏览了这些参考资料,它至少可以与我的测试用例 Logit 和 Probit 一起正常工作。 (我现在找不到我的脚本或测试用例。)

推理的坏消息是稳健的协方差矩阵尚未添加到fit_regularized,因此不能直接获得正确的三明治协方差。参数估计的标准协方差矩阵和标准误差是在正确指定模型(即似然函数)的假设下得出的,如果数据是分数而不是二元数据,则情况并非如此。

除了对二元模型使用准最大似然之外,还可以使用为 (0, 1) 中的小数数据定义的似然。一个流行的模型是 Beta 回归,它也在等待 statsmodels 的拉取请求,预计将在未来几个月内合并。

【讨论】:

  • 谢谢@user333700!那么我是否正确理解您,目前不支持惩罚和使用比例作为因变量的组合,但支持可能很快就会添加到 statsmodels 中?
  • 参数估计和概率预测应该起作用。 (我从未尝试过,但 Logit 没有需要二进制变量的代码)。目前尚未实现但将添加的功能是计算参数和预测的正确标准误差。
  • 酷,再次感谢@user333700——我会仔细看看statsmodel。如果有人有这样做的示例代码,我很乐意看到它!
  • @user333700 你是否知道现在是否已经为 logit 模型实现了 Elastic Net?如果有,能告诉我怎么用吗?
  • sklearn 是否支持使用惩罚估计和分数或比例数据作为因变量的逻辑回归?我到处找,没有看到这个功能。
猜你喜欢
  • 2013-12-24
  • 2021-04-10
  • 2020-10-11
  • 2017-11-20
  • 2023-04-02
  • 2015-05-04
  • 2018-05-05
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多