Python:statsmodels 中逻辑回归模型的 l2 惩罚?

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

有没有办法通过参数或其他方式在 statsmodel 中对逻辑回归模型进行 l2 惩罚?我刚刚在文档中找到了 l1-Penalty,但没有找到 l2-Penalty。

python pandas statsmodels
2个回答
3
投票

statsmodels.discrete 中的模型如 Logit、Poisson 和 MNLogit 目前仅具有 L1 惩罚。然而,GLM 和其他一些模型的弹性网络最近已合并到 statsmodels master 中。

具有二元响应的族二项式的 GLM 与离散.Logit 是相同的模型,尽管实现不同。请参阅我对 L2 惩罚的回答 Is ridge binomial regression available in Python?

尚未合并到 statsmodels 中的是具有结构化惩罚矩阵的 L2 惩罚,因为它在广义加法模型、GAM 和样条拟合中用作粗糙度惩罚。


3
投票

如果您仔细查看

statsmodels.regression.linear_model.OLS.fit_regularized
的文档,您会发现当前版本的 statsmodels 允许弹性网络正则化,这基本上只是 L1 和 L2 惩罚的凸组合(尽管更强大的实现采用一些后处理以减少幼稚实现的不良行为,请参阅维基百科上的“Elastic Net”了解详细信息):

ElasticNet2

如果您查看文档中

fit_regularized
的参数:

OLS.fit_regularized(method='elastic_net', alpha=0.0, L1_wt=1.0, start_params=None, profile_scale=False, refit=False, **kwargs)

您会意识到

L1_wt
只是第一个方程中的 lambda_1。因此,为了获得您正在寻找的 L2-Penalty,您只需在调用该函数时将
L1_wt=0
作为参数传递即可。举个例子:

model = sm.OLS(y, X)
results = model.fit_regularized(method='elastic_net', alpha=1.0, L1_wt=0.0)
print(results.summary())

应该为您提供一个 L2 惩罚回归,根据输入

y
预测目标
X

最后三点意见:

  1. statsmodels 目前仅实现

    elastic_net
    作为
    method
    参数的选项。这样就可以得到 L1 和 L2 以及它们的任何线性组合,但没有其他任何东西(至少对于 OLS 来说);

  2. L1惩罚回归=LASSO(最小绝对收缩和选择算子);

  3. L2 惩罚回归 = 岭回归、Tikhonov–Miller 方法、Phillips–Twomey 方法、约束线性反演方法和线性正则化方法。

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