如何更改 sklearn Lasso 对象的 alpha 值以进行二分法
How to change alpha value of sklearn Lasso object for bisection
我正在尝试实现一种算法,在该算法中,我可以有效地搜索套索问题的 alpha(l1 正则化参数)的值,从而产生给定数量的非零特征。
为此,我计划初始化一个 sklearn Lasso 对象,计算问题的系数向量,然后更改对象的 alpha 值以计算后续问题的系数向量。这样做可以让我利用 "warm start,",它使用前一个 alpha 的系数向量作为下一个 alpha 算法 运行 的初始向量,从而加快收敛速度。
问题是,sklearn 没有包含改变 Lasso 对象的 alpha 值的方法(这有点深不可测,考虑到在我看来这是 "warm start." 的唯一要点)
我如何通过热启动实现在 Lasso 上实现二分的目标?我应该只使用 lasso_path 并循环,手动输入系数向量吗?为什么 sklearn 不包含这个明显的功能,我是不是很笨?
所有可以成为管道一部分的 Scikit-learn 对象都有一个 get_params
和 set_params
方法。 get_params
returns 对象参数的字典。 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}
我正在尝试实现一种算法,在该算法中,我可以有效地搜索套索问题的 alpha(l1 正则化参数)的值,从而产生给定数量的非零特征。
为此,我计划初始化一个 sklearn Lasso 对象,计算问题的系数向量,然后更改对象的 alpha 值以计算后续问题的系数向量。这样做可以让我利用 "warm start,",它使用前一个 alpha 的系数向量作为下一个 alpha 算法 运行 的初始向量,从而加快收敛速度。
问题是,sklearn 没有包含改变 Lasso 对象的 alpha 值的方法(这有点深不可测,考虑到在我看来这是 "warm start." 的唯一要点)
我如何通过热启动实现在 Lasso 上实现二分的目标?我应该只使用 lasso_path 并循环,手动输入系数向量吗?为什么 sklearn 不包含这个明显的功能,我是不是很笨?
所有可以成为管道一部分的 Scikit-learn 对象都有一个 get_params
和 set_params
方法。 get_params
returns 对象参数的字典。 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}