【问题标题】:running lasso and ridge regression on pandas dataframe在熊猫数据框上运行套索和岭回归
【发布时间】:2018-09-24 09:07:07
【问题描述】:

我有以下代码在提供的数据集上成功运行 OLS 回归:

y = df['SPXR_{}D'.format(window)]
x = df[cols]
x = sm.add_constant(x)
mod = sm.OLS(y, x)
res = mod.fit()

我将如何运行套索和山脊?我似乎找不到任何 statsmodels 函数或包来执行此操作。

使用 sklearn 更新代码:

y = df['SPXR_{}D'.format(window)]
x = df[cols]
x = sm.add_constant(x)
mod = linear_model.Lasso()
res = mod.fit(x, y)
print(res.coef_)
print(res.intercept_)

res.coef_ 看起来像这样:

[ 0.  0. -0.  0. -0. -0. -0.  0.  0. -0.  0.  0.  0. -0. -0.  0. -0.]

我如何使用该功能有问题吗? (也许我不应该使用 statsmodels 将 alpha 常量添加到我的 DF 中?)

【问题讨论】:

  • @sacul 这似乎是我正在寻找的东西,但我没有看到任何选项来提供我的 x 和 y?
  • 查看链接页面的 Examples 部分,它显示了一个不错的小示例。
  • @sacul 很有用,你可以从编辑中看到它。但是,要么我没有得到正确的结果,要么没有正确运行回归。
  • Lasso 有一个参数“alpha”。它是一个平衡回归线的拟合和使用(即非零)系数的数量的术语。

标签: python pandas regression lasso-regression


【解决方案1】:

正如 sacul 所写,最好将 sklearn 用于这些事情。在这种情况下,

from sklearn import linear_model
rgr = linear_model.Ridge().fit(x, y)

注意以下几点:

  1. Ridgefit_intercept=True 参数减少了手动添加常量的需要。
  2. 无耻插件:我写了 ibex,一个旨在使 sklearnpandas 更好地配合使用的库。

【讨论】:

  • IIS就这么简单?我不需要为 L1 和 L2 回归提供某种值吗?
  • @ÉvaristeGalois L1 不是岭回归的一部分。您确实需要确定 L2,但它有一个默认值。我建议您查看ElasticNetCV。根据您的评论,这可能就是您所追求的。
  • 这是一个有用的库,但它似乎没有 statsmodels 的属性。显然,您必须在事先拟合后使用 x 和 y 运行单独的函数(分数),才能获得预测的 R^2 值,而不是简单地拥有适合的 R^2 属性。
猜你喜欢
  • 2018-12-16
  • 2019-10-11
  • 2020-11-04
  • 2021-06-08
  • 2019-09-19
  • 2015-03-28
  • 2019-09-17
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多