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 wmin?2n1?∥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(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 α,其他参数含义如下
在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的区别
此外,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])