Scikit-learn Python机器学习 - 回归分析算法 - Lasso 回归 (Lasso Regression)

锋哥原创的Scikit-learn Python机器学习视频教程:

https://www.bilibili.com/video/BV11reUzEEPH

课程介绍

本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。

Scikit-learn Python机器学习 - 回归分析算法 - Lasso 回归 (Lasso Regression)

Lasso(Least Absolute Shrinkage and Selection Operator)回归是一种线性回归的正则化方法,它通过添加 L1 正则化项(权重的绝对值之和)来进行特征选择和防止过拟合。与 Ridge 回归的 L2 正则化不同,Lasso 能够将某些特征的系数完全压缩到零,从而实现自动特征选择。

基本数学原理

Lasso回归是在普通最小二乘回归(OLS)的基础上加入了L1正则化项。其目标函数如下:

核心特点

  1. 特征选择:能够将不重要的特征系数压缩到零

  2. 稀疏解:产生稀疏的系数向量

  3. 处理多重共线性:当特征高度相关时,Lasso 通常会选择其中一个特征

与 Ridge 回归的比较

特性 Lasso 回归 Ridge 回归
正则化类型 L1(绝对值) L2(平方)
特征选择 是(产生稀疏解) 否(系数接近但不等于零)
解的唯一性 可能不唯一(当特征相关时) 唯一
计算效率 较高(尤其对于高维数据) 一般
适用场景 特征选择,高维数据 处理多重共线性

API介绍

Lasso 类构造函数

复制代码
Lasso(alpha=1.0, *, fit_intercept=True, precompute=False, copy_X=True, 
      max_iter=1000, tol=1e-4, warm_start=False, positive=False, 
      random_state=None, selection='cyclic')

核心参数:

1. alpha(正则化强度)

  • 类型: float, 默认=1.0

  • 作用: 控制 L1 正则化的强度

  • 影响:

    • α 值越大,正则化越强,更多系数被压缩到零

    • α = 0 时退化为普通线性回归

    • 通常通过交叉验证选择最佳值

2. fit_intercept(是否计算截距)

  • 类型: bool, 默认=True

  • 作用: 是否计算模型的截距项

  • 建议: 通常保持为 True

3. max_iter(最大迭代次数)

  • 类型: int, 默认=1000

  • 作用: 优化算法的最大迭代次数

  • 重要: Lasso 使用坐标下降法,可能需要较多迭代才能收敛

4. tol(收敛容忍度)

  • 类型: float, 默认=1e-4

  • 作用: 优化的停止准则,如果更新小于 tol,则停止优化

  • 调整: 更小的值意味着更高的精度但更长的计算时间

5. positive(强制正系数)

  • 类型: bool, 默认=False

  • 作用: 当设置为 True 时,强制系数为非负数

  • 应用场景: 当特征与目标变量只能有正向关系时使用

6. selection(系数更新策略)

  • 类型: str, 默认='cyclic'

  • 可选值:

    • 'cyclic': 按顺序循环更新每个系数

    • 'random': 随机更新系数,有时收敛更快

  • 建议: 对于大型数据集或当收敛较慢时尝试 'random'

7. warm_start(热启动)

  • 类型: bool, 默认=False

  • 作用: 当设置为 True 时,重用前一次调用的解作为初始化

  • 用途: 用于在不同 alpha 值下连续拟合,可以加速计算

8. random_state(随机种子)

  • 类型: int, 默认=None

  • 作用: 当 selection='random' 时,用于控制随机数生成器

  • 用途: 确保结果可重现

具体示例-加州房价预测

复制代码
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, Lasso
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
​
# 加载数据
california = fetch_california_housing()
print(california.data, california.data.shape)
print(california.target)
print(california.feature_names)
​
# 2,数据预处理
X_train, X_test, y_train, y_test = train_test_split(california.data, california.target, test_size=0.2, random_state=20)
scaler = StandardScaler()  # 数据标准化:消除不同特征量纲的影响
X_train_scaled = scaler.fit_transform(X_train)  # fit计算生成模型,transform通过模型转换数据
X_test_scaled = scaler.transform(X_test)  # 使用训练集的参数转换测试集
​
# 3,创建和训练模型
la_model = Lasso()  # 创建分类器实例
la_model.fit(X_train_scaled, y_train)  # fit计算生成模型
print('权重系数:', la_model.coef_)
print('偏置值:', la_model.intercept_)
​
# 4,模型评估
y_predict = la_model.predict(X_test_scaled)
print('预测值:', y_predict)
print('真实值:', y_test)
mse = mean_squared_error(y_test, y_predict)
print('梯度下降模型均方误差:', mse)

运行结果:

复制代码
[[   8.3252       41.            6.98412698 ...    2.55555556
    37.88       -122.23      ]
 [   8.3014       21.            6.23813708 ...    2.10984183
    37.86       -122.22      ]
 [   7.2574       52.            8.28813559 ...    2.80225989
    37.85       -122.24      ]
 ...
 [   1.7          17.            5.20554273 ...    2.3256351
    39.43       -121.22      ]
 [   1.8672       18.            5.32951289 ...    2.12320917
    39.43       -121.32      ]
 [   2.3886       16.            5.25471698 ...    2.61698113
    39.37       -121.24      ]] (20640, 8)
[4.526 3.585 3.521 ... 0.923 0.847 0.894]
['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']
权重系数: [ 0.  0.  0. -0. -0. -0. -0. -0.]
偏置值: 2.06782355377907
预测值: [2.06782355 2.06782355 2.06782355 ... 2.06782355 2.06782355 2.06782355]
真实值: [1.176 2.922 1.313 ... 1.029 2.795 1.293]
梯度下降模型均方误差: 1.3949525140456152
相关推荐
wljt3 分钟前
Linux 常用命令速查手册(Java开发版)
java·linux·python
WPG大大通7 分钟前
AIoT | 软件:Astra MCP边缘算力构建详解
经验分享·笔记·python·硬件架构·代码
ccLianLian16 分钟前
计算机视觉·TagCLIP
人工智能·算法
千弥霜22 分钟前
codeforces1997(div.3)E F
算法
波诺波25 分钟前
环境管理器
linux·前端·python
诸葛思颖28 分钟前
把本地 Python 项目用 Git 进行版本控制并推送到 GitHub
git·python·github
测试老哥33 分钟前
自动化测试用例的编写和管理
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
周杰伦_Jay39 分钟前
【Python Web开源框架】Django/Flask/FastAPI/Tornado/Pyramid
前端·python·开源
周杰伦_Jay40 分钟前
【Python后端API开发对比】FastAPI、主流框架Flask、Django REST Framework(DRF)及高性能框架Tornado
数据结构·人工智能·python·django·flask·fastapi·tornado
利刃大大1 小时前
【动态规划:01背包】01背包详解 && 模板题 && 优化
c++·算法·动态规划·力扣·背包问题