Lasso简介
Lasso
,即The Least Absolute Shrinkage and Selection Operator,是用于拟合稀疏系数的线性模型,其最小化目标函数为
min w 1 2 n ∥ X w − y ∥ 2 2 + α ∥ w ∥ 1 \min_w\frac{1}{2n}\Vert Xw-y\Vert^2_2+\alpha\Vert w\Vert_1 wmin2n1∥Xw−y∥22+α∥w∥1
就其形式而言,与岭回归是十分相似的,最大差别是惩罚因子为1范数,而岭回归是2-范数。这个微小的差别,导致二者在求解共线性问题得到了截然不同的结果,即在岭回归中,各参数之间不会产生较大差异,而Lasso回归时,更容易让共线性参数中的一个置零,从而使得结果变得稀疏。
from sklearn.linear_model import Lasso
reg = Lasso(alpha=0.1)
reg.fit([[0, 0], [1, 1]], [0, 1])
reg.predict([[1, 1]])
# 0.8
Lasso类
Lasso作为一个类,其完整的构造参数如下
Lasso(alpha=1.0, *, fit_intercept=True, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
其中,alpha即其最小化目标函数中的 α \alpha α,其他参数含义如下
- fit_intercept 设为True时,将计算模型的截距
- precompute 输入为False或者矩阵。若不为False,则预先计算Gram矩阵,以加速计算。
- copy_X 设为True时,将复制X,以避免被重写
- max_iter 最大迭代次数
- tol 优化的容忍度
- warm_start 暖启动,当设为True时,将使用上一次优化的结果。
- positive 当设为True时,强制系数为正
- random_state 随机数种子
- selection 可选cyclic或者random 当设为random时,每次迭代系数都会随机更新;否则将循环使用默认的参数序列
LassoCV
在sklearn中,除了lasso之外,还提供了LassoCV算法,即沿正则化路径迭代拟合的Lasso算法。其中,CV是cross-validation的缩写,其构造函数如下
LassoCV(*, eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, precompute='auto', max_iter=1000, tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=None, positive=False, random_state=None, selection='cyclic')
其中大部分参数与Lasso中相似,其前三个参数则体现出LassoCV和Lasso的区别
- eps 路径长度
- n_alphas 沿着正则化路径的 α \alpha α个数
- alphas 对应的 α \alpha α列表,若为None,则自动设置
此外,n_jobs为计算时使用的CPU个数,verbose设置日志的详细程度,稍显复杂的参数是cv,用于设置交叉验证的拆分策略。
示例如下
from sklearn.linear_model import LassoCV
from sklearn.datasets import make_regression
X, y = make_regression(noise=4, random_state=0)
reg = Lasso(random_state=0).fit(X, y)
regCV = LassoCV(cv=5, random_state=0).fit(X, y)
reg.predict(X[:1,])
# array([-76.35716298])
regCV.predict(X[:1,])
# array([-78.49519808])