如何在python中执行逻辑套索?

时间:2017-01-13 16:47:16

标签: python scikit-learn logistic-regression lasso

scikit-learn包提供了函数Lasso()LassoCV(),但没有选择适合逻辑函数而不是线性函数...如何在python中执行逻辑套索?

3 个答案:

答案 0 :(得分:10)

Lasso通过L1惩罚来优化最小二乘问题。 根据定义,您无法使用Lasso优化逻辑函数。

如果要优化具有L1惩罚的逻辑函数,可以使用具有L1惩罚的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惩罚。

答案 1 :(得分:2)

您可以在Python中使用glment。 Glmnet使用热启动和主动集收敛,因此非常高效。这些技术比其他套索实现更快速地目眩。您可以从https://web.stanford.edu/~hastie/glmnet_python/

下载它

答案 2 :(得分:0)

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 library。这实现了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来调整罚款,但我会让你知道。

3其他

PyMC

您也可以采用完全贝叶斯方法。可以使用给定数据来近似估计系数的分布,而不是使用L1惩罚优化来找到系数的点估计。如果您对系数使用拉普拉斯先验,则这将为您提供与L1罚分最大似然估计相同的答案。拉普拉斯先验引起稀疏。

PyMC的人们有a tutorial here来进行类似的设置。祝好运。