【机器学习】机器学习的基本分类-监督学习-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 回归是一种强大且解释性好的线性模型,通过 正则化实现特征选择和降维,适合高维但稀疏的数据集。

相关推荐
旖旎夜光1 分钟前
Linux(3)(上)
linux·学习
我命由我123459 分钟前
Photoshop - Photoshop 工具栏(43)标尺工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
AIGC_北苏18 分钟前
V3 Admin Vite 5.0 开源项目剖析【一】
学习
夏幻灵22 分钟前
为什么要配置环境变量?
笔记·算法
铭哥的编程日记26 分钟前
Manacher算法解决所有回文串问题 (覆盖所有题型)
算法
LYFlied35 分钟前
【每日算法】LeetCode 300. 最长递增子序列
前端·数据结构·算法·leetcode·职场和发展
ohnoooo935 分钟前
251225 算法2 期末练习
算法·动态规划·图论
车队老哥记录生活1 小时前
强化学习 RL 基础 3:随机近似方法 | 梯度下降
人工智能·算法·机器学习·强化学习
d111111111d1 小时前
STM32 电源管理模式全解析:低功耗场景该如何选型?
笔记·stm32·单片机·嵌入式硬件·学习
闲看云起1 小时前
LeetCode-day2:字母异位词分组分析
算法·leetcode·职场和发展