sklearn线性模型之Lasso回归

文章目录

    • Lasso简介
    • Lasso类
    • LassoCV

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 wmin2n1Xwy22+αw1

就其形式而言,与岭回归是十分相似的,最大差别是惩罚因子为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])

你可能感兴趣的:(#,sklearn,sklearn,回归,人工智能,Lasso,python,LassoCV)