我试图实现一种算法,我可以有效地搜索套索问题的alpha值(l1正则化参数),从而产生给定数量的非零特征。
为此,我计划初始化sklearn Lasso对象,计算问题的系数向量,然后更改对象的alpha值以计算后续问题的系数向量。这样做可以让我利用"热启动,"它使用前一个alpha的系数向量作为在下一个alpha运行的算法的初始向量,从而加快收敛速度。
问题是,sklearn没有包含改变Lasso对象的alpha值的方法(这是一种不可思议的,考虑到我认为这是"热情开始的唯一点。&# 34)
如何以热情的开始实现我对Lasso实施二分的目标?我应该只使用lasso_path和loop,手动输入系数向量吗?为什么sklearn不会包含这个明显的功能,我是否愚蠢?
答案 0 :(得分:2)
所有可以作为管道一部分的Scikit-learn对象都有get_params
和set_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}