Scikit-learn提供Lasso()
和LassoCV()
函数,但没有选项可以拟合逻辑回归函数而非线性函数...如何在Python中执行逻辑Lasso回归?
Scikit-learn提供Lasso()
和LassoCV()
函数,但没有选项可以拟合逻辑回归函数而非线性函数...如何在Python中执行逻辑Lasso回归?
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惩罚。
Lasso
类仅包括最小二乘法。其他类包括L1正则化(LogisticRegression
、NMF
等),但被称为“L1正则化”,而不是“Lasso”。 - TomDLTglmnet
。Glmnet使用热启动和主动集收敛,因此非常高效。这些技术使得glmnet
比其他套索实现更快。你可以从https://web.stanford.edu/~hastie/glmnet_python/下载它。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)
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
调整惩罚项,但是我会让你自己解决。
您也可以采用完全贝叶斯方法。与其使用L1惩罚优化来找到系数的点估计,您可以近似计算给定数据情况下系数的分布。如果您为系数使用拉普拉斯先验,这将给出与L1惩罚最大似然估计相同的答案。拉普拉斯先验引入了稀疏性。
PyMC的开发者在这里提供了设置此类内容的教程。祝好运。