当前位置: 首页 > news >正文

深入解析: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
http://www.jsqmd.com/news/13008/

相关文章:

  • 讲给 SRE 听 —— 零基础入门 KNN 分类算法【左扬精讲】:SRE 运维场景实战(含余弦相似度)
  • 【终章】:幸福的复利——打造你的每日幸福微习惯 - 指南
  • 完整教程:SQLMap注入学习靶机(打靶记录)
  • 实用指南:Go 语言中的**数组 (Array)*用法
  • 行业词汇
  • Java实现业务数据报表的邮件定时发送功能
  • 编写Python自动化脚本,使用Autodesk Fusion辅助Ansys HFSS进行建模
  • 云原生周刊:KubeSphere社区版正式发布
  • GauGAN详解与实现 - 实践
  • 三剑客系列-sed命令
  • 超景深立体显微镜厂家Top10推荐:拓界光电引领行业新风尚
  • 深入解析:D018 vue+django 旅游图谱推荐问答系统|neo4j数据库|智能问答
  • 20232419 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • 完整教程:用deepseek部署全自动的机器人--bytebot
  • 44. 开发商购买土地
  • 当AI与机器人走进生活:我们即将迎来的日常变革
  • 永久关闭docker0网络的方案
  • 显微镜厂家TOP10推荐:拓界光电以创新技术引领精密观测新时代
  • net中使用了垃圾回收机制(GC)功能
  • 2025 超景深三维显微镜厂家 TOP10 推荐:三维成像技术的行业应用标杆​
  • 音乐节奏跳动
  • CF2160 Codeforces Round 1058 (Div. 2) 游记
  • 2025年国内铝单板工厂推荐/国内铝单板厂家/ 市场铝单板推/公司榜荐
  • 一个老码农的掏心窝推荐:微擎,我后悔没早点遇到的开发利器
  • 国内铝单板工厂推荐/国内铝单板厂家/ 市场铝单板推荐:四川汇才铝业有限公司
  • 超景深显微镜厂家TOP10推荐:拓界光电引领精密观测新时代
  • 2025 闪蒸/流化床/喷雾/实验型喷雾/离心喷雾/压力喷雾/流化床喷雾/桨叶/盘式/真空耙式干燥机厂家推荐榜单:技术适配与场景落地能力成核心考量
  • 2025 年点胶机源头厂家最新推荐排行榜:自动 / 果冻胶 / 无痕内衣 / 烫钻 / 珠宝热熔胶等多类型设备优质企业精选
  • harbor 局域网https 自签名证书搭建
  • count(*),count(1),count(字段名)都有什么区别?