如何在 python 中执行逻辑套索?
How to perform logistic lasso in python?
scikit-learn 包提供函数 Lasso()
和 LassoCV()
但没有选项来拟合逻辑函数而不是线性函数...如何在 [=15= 中执行逻辑套索]?
Lasso 用 L1 惩罚优化 least-square 问题。
根据定义,您不能使用套索优化逻辑函数。
如果要优化具有 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 惩罚。
您可以在 Python 中使用 glment。 Glmnet 使用热启动和活动集收敛,因此非常高效。这些技术使 glment 比其他套索实现更快。您可以从 https://web.stanford.edu/~hastie/glmnet_python/
下载
1 scikit-学习:sklearn.linear_model.LogisticRegression
来自 scikit-learn 的 sklearn.linear_model.LogisticRegression
可能是最好的:
因为@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 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 设置了类似的东西。祝你好运。
scikit-learn 包提供函数 Lasso()
和 LassoCV()
但没有选项来拟合逻辑函数而不是线性函数...如何在 [=15= 中执行逻辑套索]?
Lasso 用 L1 惩罚优化 least-square 问题。 根据定义,您不能使用套索优化逻辑函数。
如果要优化具有 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 惩罚。
您可以在 Python 中使用 glment。 Glmnet 使用热启动和活动集收敛,因此非常高效。这些技术使 glment 比其他套索实现更快。您可以从 https://web.stanford.edu/~hastie/glmnet_python/
下载1 scikit-学习:sklearn.linear_model.LogisticRegression
来自 scikit-learn 的 sklearn.linear_model.LogisticRegression
可能是最好的:
因为@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 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 设置了类似的东西。祝你好运。