如何在Python中执行逻辑回归Lasso?

15

Scikit-learn提供Lasso()LassoCV()函数,但没有选项可以拟合逻辑回归函数而非线性函数...如何在Python中执行逻辑Lasso回归?


我仍然没有答案。最终我使用glmnet包在R中执行了这个分析。 - Fringant
3个回答

29

Lasso算法优化带有L1惩罚的最小二乘问题。 根据定义,不能使用Lasso算法优化logistic函数。

如果您想使用L1惩罚来优化logistic函数,可以使用LogisticRegression估计器:

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
log = LogisticRegression(penalty='l1', solver='liblinear')
log.fit(X, y)

请注意,只有LIBLINEAR和SAGA(自v0.19添加)求解器处理L1惩罚。


4
套索回归不仅仅用于最小二乘问题。任何似然惩罚(L1或L2)都可以用于任何基于似然函数的模型,这包括使用指数族似然函数建模的广义线性模型,其中包括逻辑回归。 - william_grisaitis
5
同意。Lasso正则化最初是为了最小二乘法而定义的,但可以轻松扩展到各种统计模型中。在scikit-learn中,Lasso类仅包括最小二乘法。其他类包括L1正则化(LogisticRegressionNMF等),但被称为“L1正则化”,而不是“Lasso”。 - TomDLT
啊,好的。我以为你是一般地提到 Lasso。 - william_grisaitis

2

1

1 scikit-learn:sklearn.linear_model.LogisticRegression

来自scikit-learn的sklearn.linear_model.LogisticRegression可能是最好的:

正如@TomDLT said的,Lasso适用于最小二乘(回归)情况,而不是逻辑(分类)情况。

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(
    penalty='l1',
    solver='saga',  # or 'liblinear'
    C=regularization_strength)

model.fit(x, y)

2 python-glmnet: glmnet.LogitNet

您还可以使用Civis Analytics的python-glmnet库。这实现了scikit-learn BaseEstimator API:

# source: https://github.com/civisanalytics/python-glmnet#regularized-logistic-regression

from glmnet import LogitNet

m = LogitNet(
    alpha=1,  # 0 <= alpha <= 1, 0 for ridge, 1 for lasso
)
m = m.fit(x, y)

我不确定如何使用 LogitNet 调整惩罚项,但是我会让你自己解决。

其他三个

PyMC

您也可以采用完全贝叶斯方法。与其使用L1惩罚优化来找到系数的点估计,您可以近似计算给定数据情况下系数的分布。如果您为系数使用拉普拉斯先验,这将给出与L1惩罚最大似然估计相同的答案。拉普拉斯先验引入了稀疏性。

PyMC的开发者在这里提供了设置此类内容的教程。祝好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接