有没有办法通过参数或其他方式在 statsmodel 中对逻辑回归模型进行 l2 惩罚?我刚刚在文档中找到了 l1-Penalty,但没有找到 l2-Penalty。
statsmodels.discrete 中的模型如 Logit、Poisson 和 MNLogit 目前仅具有 L1 惩罚。然而,GLM 和其他一些模型的弹性网络最近已合并到 statsmodels master 中。
具有二元响应的族二项式的 GLM 与离散.Logit 是相同的模型,尽管实现不同。请参阅我对 L2 惩罚的回答 Is ridge binomial regression available in Python?
尚未合并到 statsmodels 中的是具有结构化惩罚矩阵的 L2 惩罚,因为它在广义加法模型、GAM 和样条拟合中用作粗糙度惩罚。
statsmodels.regression.linear_model.OLS.fit_regularized
的文档,您会发现当前版本的 statsmodels 允许弹性网络正则化,这基本上只是 L1 和 L2 惩罚的凸组合(尽管更强大的实现采用一些后处理以减少幼稚实现的不良行为,请参阅维基百科上的“Elastic Net”了解详细信息):
如果您查看文档中
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
。
最后三点意见:
statsmodels 目前仅实现
elastic_net
作为 method
参数的选项。这样就可以得到 L1 和 L2 以及它们的任何线性组合,但没有其他任何东西(至少对于 OLS 来说);
L1惩罚回归=LASSO(最小绝对收缩和选择算子);
L2 惩罚回归 = 岭回归、Tikhonov–Miller 方法、Phillips–Twomey 方法、约束线性反演方法和线性正则化方法。