【机器学习】机器学习的基本分类-监督学习-Lasso 回归(Least Absolute Shrinkage and Selection Operator)

Lasso 回归是一种线性回归方法,通过引入 ​ 正则化(绝对值惩罚项)约束回归系数,既能解决多重共线性问题,又具有特征选择能力。


1. Lasso 回归的目标函数

Lasso 的目标是最小化以下损失函数:

其中:

  • 是残差平方和。
  • 正则化项。
  • λ > 0 是正则化强度的超参数,控制对回归系数的惩罚程度。

2. Lasso 的特点

  1. 特征选择

    • 正则化能够将一些不重要的特征系数缩为 0,从而实现特征选择。
    • 这是 Lasso 和岭回归的最大区别,岭回归仅会缩小系数,但不会完全归零。
  2. 对多重共线性的处理

    • 当特征之间存在较强相关性时,Lasso 更倾向于保留一个特征,压缩其他特征的系数为 0,从而简化模型。

3. 数学解读

目标函数

Lasso 的优化目标:

  • :拟合误差(最小化残差平方和)。
  • :正则化项,控制模型复杂度。
几何解释
  • 正则化将优化问题的约束区域限制在菱形-范数球)内。
  • 菱形的顶点位于坐标轴上,因此 Lasso 具有将某些系数缩为 0 的特性。

4. 优缺点

优点
  1. 特征选择能力:可以将不重要的特征系数缩为 0,直接实现特征筛选。
  2. 降低模型复杂度:减少模型的变量数量,从而提高模型的可解释性。
  3. 解决多重共线性问题:对共线特征进行选择性保留,避免过拟合。
缺点
  1. 可能偏差较大:Lasso 会对所有系数施加惩罚,可能导致模型在某些情况下表现不佳。
  2. 不适合高维数据:当样本数小于特征数时,Lasso 的选择结果可能不稳定。
  3. 对正则化参数敏感:λ 的选择对模型性能影响较大。

5. Lasso 回归的实现

以下是 Python 中使用 scikit-learn 的实现示例:

python 复制代码
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression
from sklearn.metrics import mean_squared_error

# 生成数据
X, y = make_regression(n_samples=100, n_features=10, noise=10, random_state=42)

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建 Lasso 模型
lasso = Lasso(alpha=0.1)  # alpha 即 λ
lasso.fit(X_train, y_train)

# 预测
y_pred = lasso.predict(X_test)

# 评价
print("MSE:", mean_squared_error(y_test, y_pred))
print("回归系数:", lasso.coef_)

输出结果

python 复制代码
MSE: 104.93221988874537
回归系数: [18.96025415 54.8553183   3.43132401 63.6082866  92.65442432 69.48209529
 84.42789762  8.49332936  2.90087787 71.0628166 ]

6. 正则化参数 λ 的调优

Lasso 中的超参数 λ(在 scikit-learn 中是 alpha)需要通过交叉验证选择。可以使用 LassoCV 进行自动调优:

python 复制代码
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression
from sklearn.linear_model import LassoCV


# 生成数据
X, y = make_regression(n_samples=100, n_features=10, noise=10, random_state=42)

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 自动选择最佳 λ
lasso_cv = LassoCV(alphas=[0.1, 1.0, 10.0], cv=5)  # 5 折交叉验证
lasso_cv.fit(X_train, y_train)

# 最佳正则化参数
print("最佳 λ:", lasso_cv.alpha_)

# 使用最佳参数的回归系数
print("回归系数:", lasso_cv.coef_)

输出结果

python 复制代码
最佳 λ: 0.1
回归系数: [18.96025415 54.8553183   3.43132401 63.6082866  92.65442432 69.48209529
 84.42789762  8.49332936  2.90087787 71.0628166 ]

7. Lasso 与岭回归的比较

方法 正则化类型 特点 应用场景
岭回归 ​ 范数 收缩系数,解决多重共线性问题 特征数量较多,但不需要特征选择时使用
Lasso 回归 范数 稀疏化系数,具有特征选择能力 需要减少特征数量或增强模型解释性时
ElasticNet ​ 范数 综合岭回归和 Lasso 的优点 高维数据特征筛选且有多重共线性时

8. 应用场景

  1. 基因数据分析:处理高维稀疏数据,选择关键基因。
  2. 金融数据建模:选择重要指标,如宏观经济特征对市场走势的影响。
  3. 图像处理:降维和稀疏特征提取。

Lasso 回归是一种强大且解释性好的线性模型,通过 正则化实现特征选择和降维,适合高维但稀疏的数据集。

相关推荐
AI波克布林2 分钟前
发文暴论!线性注意力is all you need!
人工智能·深度学习·神经网络·机器学习·注意力机制·线性注意力
张子夜 iiii3 分钟前
机器学习算法系列专栏:主成分分析(PCA)降维算法(初学者)
人工智能·python·算法·机器学习
weixin_456904278 分钟前
一文讲清楚Pytorch 张量、链式求导、正向传播、反向求导、计算图等基础知识
人工智能·pytorch·学习
一匹电信狗15 分钟前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
Blossom.11829 分钟前
把 AI 推理塞进「 8 位 MCU 」——0.5 KB RAM 跑通关键词唤醒的魔幻之旅
人工智能·笔记·单片机·嵌入式硬件·深度学习·机器学习·搜索引擎
sp4243 分钟前
白话 LRU 缓存及链表的数据结构讲解(二)
算法
PineappleCoder1 小时前
为什么说发布 - 订阅是代码的 “万能胶水”?解耦逻辑全解析
前端·javascript·算法
Python私教1 小时前
从“Hello World”到“高并发中间件”:Go 语言 2025 系统学习路线图
学习·中间件·golang
墨染点香1 小时前
LeetCode 刷题【43. 字符串相乘】
算法·leetcode·职场和发展
weixin_307779131 小时前
VS Code配置MinGW64编译Ipopt库
开发语言·c++·vscode·算法