14

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

4

3 回答 3

24

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

如果要优化带有 L1 惩罚的逻辑函数,可以使用LogisticRegression带有 L1 惩罚的估计器:

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 惩罚。

于 2017-01-16T17:39:29.527 回答
2

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

于 2020-01-24T18:10:56.683 回答
1

1个scikit学习:sklearn.linear_model.LogisticRegression

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

正如@TomDLT所说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 BaseEstimatorAPI:

# 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 的人在这里有一个关于设置类似东西的教程。祝你好运。

于 2020-04-21T16:45:43.000 回答