如何更改sklearn Lasso对象的alpha值以进行二分

时间:2018-06-13 15:35:17

标签: python machine-learning scikit-learn lasso bisection

我试图实现一种算法,我可以有效地搜索套索问题的alpha值(l1正则化参数),从而产生给定数量的非零特征。

为此,我计划初始化sklearn Lasso对象,计算问题的系数向量,然后更改对象的alpha值以计算后续问题的系数向量。这样做可以让我利用"热启动,"它使用前一个alpha的系数向量作为在下一个alpha运行的算法的初始向量,从而加快收敛速度​​。

问题是,sklearn没有包含改变Lasso对象的alpha值的方法(这是一种不可思议的,考虑到我认为这是"热情开始的唯一点。&# 34)

如何以热情的开始实现我对Lasso实施二分的目标?我应该只使用lasso_path和loop,手动输入系数向量吗?为什么sklearn不会包含这个明显的功能,我是否愚蠢?

1 个答案:

答案 0 :(得分:2)

所有可以作为管道一部分的Scikit-learn对象都有get_paramsset_params方法。 get_params返回对象参数的字典。 set_params用于使用新值更新参数。请参阅以下示例代码

import numpy as np
from sklearn.linear_model import Lasso

# Make some random data
x = np.random.random((100,4))
y = np.random.random(100)

m = Lasso(warm_start = True)
m.fit(x,y)

# Print out the current params
print(m.get_params())
# The output will be
#{'alpha': 1.0, 'copy_X': True, 'fit_intercept': True, 
# 'max_iter': 1000, 'normalize': False, 'positive': False, 
# 'precompute': False, 'random_state': None, 'selection': 'cyclic',
# 'tol': 0.0001, 'warm_start': True}

# We can update the alpha value
m.set_params(alpha = 2.0)

# Fit again if we want
m.fit(x,y)

# Print out the current params
print(m.get_params())
# The output will be
#{'alpha': 2.0, 'copy_X': True, 'fit_intercept': True, 
# 'max_iter': 1000, 'normalize': False, 'positive': False, 
# 'precompute': False, 'random_state': None, 'selection': 'cyclic',
# 'tol': 0.0001, 'warm_start': True}