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

Posted

技术标签:

【中文标题】如何在python中执行逻辑套索?【英文标题】:How to perform logistic lasso in python? 【发布时间】:2017-05-29 02:49:09 【问题描述】:

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

【问题讨论】:

我仍然没有答案。我最终使用包 glmnet 在 R 中执行了这个分析。 【参考方案1】:

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

【讨论】:

套索不仅用于最小二乘问题。任何似然惩罚(L1 或 L2)都可以与任何似然公式模型一起使用,其中包括使用指数族似然函数建模的任何广义线性模型,其中包括逻辑回归。 同意。 Lasso 正则化最初是为最小二乘定义的,它很容易扩展到各种统计模型。但在 scikit-learn 中,Lasso 类仅包括最小二乘。其他类包括 L1 正则化(LogisticRegressionNMF、...),但它被称为“L1 正则化”,而不是“Lasso”。 啊好的。我以为你一般指的是套索。【参考方案2】:

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

【讨论】:

【参考方案3】:

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 来设置类似的东西。祝你好运。

【讨论】:

以上是关于如何在python中执行逻辑套索?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单词选择游戏中绘制橡皮筋或套索进行选择

如何在Python中使用VIPS执行逻辑操作和逻辑索引?

如何将套索和岭回归拟合(Glmnet)叠加到数据上?

如何在套索回归或任何其他方法中生成系数 >0?

Photoshop 的磁性套索是如何工作的?

如何从循环通过多个 alpha 的套索回归中提取给我最低均方误差的 alpha?