【机器学习300问】110、什么是Lasso回归模型?

        LASSO回归的全称是Least Absolute Shrinkage and Selection Operator,中文叫“最小绝对收缩和选择算子”,用一个比喻来初步感受一下它的作用:

        想象你在整理一个杂乱无章的房间,里面堆满了各种物品(代表众多的预测变量),有些物品对你来说很有价值(真正影响结果的变量),而有些则是可有可无的杂物(与结果关系不大或无关的变量)。Lasso回归就像是一个高效的空间整理师,它不仅帮你整理出最重要的几样物品,还会把那些不重要的杂物直接扔出门外,让你的房间变得干净整洁,同时也更容易找到你需要的东西。

Lasso回归可以有效应对多重共线性问题,即使在预测变量高度相关的情况下也能表现良好。

一、Lasso回归的原理

(1)数学表达

J = \frac{1}{2n} [\sum_{i=1}^n (y_i - \sum_{j=1}^p \beta_j x_{ij})^2 + \alpha \sum_{j=1}^p |\beta_j|]

在这个表达式中:

第一部分:\frac{1}{2n} \sum_{i=1}^n (y_i - \sum_{j=1}^p \beta_j x_{ij})^2是回归模型的均方误差(MSE)

第二部分:\alpha \sum_{j=1}^p |\beta_j|是参数向量的L1范数乘以一个调节参数α

n代表样本的数量,p 代表自变量的数量,y_i代表因变量的第i个观测值,\beta_j代表第j个回归系数,x_{ij}代表第i个观测的第j个自变量的值。α是正则化参数,它控制着L1惩罚的强度。

(2)文字说明

        LASSO的目标函数包括数据拟合项和惩罚项,其中惩罚项是系数的L1范数,这使得部分系数严格收缩到零,从而实现自动的特征选择。

        Lasso回归的目标是最小化误差平方和,同时施加所有系数的绝对值之和的惩罚。这种类型的正则化(L1正则化)可以导致系数的某些估计值精确地等于0。这意味着,Lasso回归可以有效地进行变量选择,并确定最重要的变量。L1正则化有助于处理特征数量可能多于样本数量的问题,防止模型过拟合,并且可以增强模型的预测能力。

        这个过程就好比是用一根神奇的橡皮筋绑在所有物品上,然后逐渐拉紧。对于那些不那么重要的物品(即对预测结果贡献小的变量),橡皮筋会直接把它们的“价值”(系数)拉到零,仿佛它们从未存在过,从而实现了变量的选择性剔除;而对于关键物品(重要变量),即便橡皮筋拉得很紧,它们依然能保持一定的“体积”(非零系数),因为它们对房间的布局(模型结果)至关重要。

        Lasso的L1惩罚项尤其在变量的数量很大时有用,当中只有少数几个因素实际影响响应变量,因此该方法能够自动进行特征选择并输出一个简洁模型。一个合适的α值可以通过交叉验证获得,α的最佳值应平衡误差平方和的减少和模型复杂度的降低(即系数的稀疏性)。

二、Lasso回归的局限性

        Lasso回归非常强大,拥有特征选择、处理多重共线性等优点,但也存在局限性:

(1)计算成本与速度

        Lasso回归没有显式解,这意味着不能像求解普通线性回归那样直接得到参数估计。相反,需要依赖迭代算法,如坐标下降法或最小角回归等。这些算法虽然有效,但相比有显式解的方法,计算成本较高,尤其是在处理大规模数据集时,可能会显得较慢。

(2)连续型变量的处理

        Lasso回归采用的L1范数惩罚可能导致对连续型变量的变化非常敏感。即使变量的小幅变动也可能引起系数的大幅度变化,有时甚至将重要变量的系数“挤压”至零,这可能不是我们期望的结果。相比之下,岭回归使用L2范数惩罚,对连续变量的处理更为温和。

(3)变量选择的不稳定性

        Lasso回归在变量选择上的结果可能不稳定,特别是当存在多个高度相关的预测变量时。数据的微小变化或正则化参数λ的轻微调整都可能导致选入或排除的变量发生变化,这种现象被称为“阈值效应”。

(4)系数的非唯一性

        在某些情况下,Lasso回归得到的系数解可能不是唯一的,特别是当存在多个变量高度相关时。这增加了结果解释的难度。虽然Lasso可以减少模型的复杂度,避免过拟合,但过度的正则化(即选择较大的λ值)可能会引入偏差,导致模型欠拟合,即无法充分捕捉数据的真实结构。尽管稀疏性是Lasso的一个吸引人的特性,它意味着模型只保留少数重要的特征,但在某些场景下,如果所有的特征都对预测有贡献,过于追求稀疏性可能会牺牲模型的预测性能。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 09:38:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 09:38:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 09:38:05       82 阅读
  4. Python语言-面向对象

    2024-06-08 09:38:05       91 阅读

热门阅读

  1. 数据结构:顺序串

    2024-06-08 09:38:05       31 阅读
  2. 994. 腐烂的橘子

    2024-06-08 09:38:05       31 阅读
  3. Flutter核心原理

    2024-06-08 09:38:05       23 阅读
  4. 你知道 npmrc 文档吗? ---- npmrc 关键作用介绍

    2024-06-08 09:38:05       30 阅读
  5. QVariant用法介绍

    2024-06-08 09:38:05       30 阅读
  6. DevOps的原理及应用详解(四)

    2024-06-08 09:38:05       26 阅读
  7. istack智能堆叠

    2024-06-08 09:38:05       28 阅读