文章目录

  • 线性回归与梯度下降:理论与实践
    • 1. 引言
    • 2. 回归分析
      • 2.1 什么是回归?
      • 2.2 线性回归
      • 2.3 损失函数
      • 2.4 多参数回归
    • 3. 参数求解:最小二乘法
      • 3.1 最小二乘法 MSE
      • 3.2 最小二乘法的优缺点
        • 优点:
        • 缺点:
    • 4. 梯度下降
      • 4.1 梯度下降概念
      • 4.2 梯度下降步骤
      • 4.3 梯度下降公式
      • 4.4 学习率
      • 4.5 自己实现梯度下降
      • 4.6 梯度下降的变种
        • BGD(批量梯度下降)
        • SGD(随机梯度下降)
        • MBGD(小批量梯度下降)
      • 4.7 梯度下降优化
    • 5. 使用场景
    • 6. 优缺点
      • 6.1 线性回归
        • 优点:
        • 缺点:
      • 6.2 梯度下降
        • 优点:
        • 缺点:
    • 7. 总结


线性回归与梯度下降:理论与实践

1. 引言

回归分析是一种常用的统计方法,用于建立一个因变量与一个或多个自变量之间的关系模型。本文将重点讨论线性回归梯度下降,两者是数据科学和机器学习中常见的基础方法。

2. 回归分析

2.1 什么是回归?

回归分析是一种统计方法,用于建模因变量(目标值)与自变量(特征)之间的关系。在回归分析中,目标是找到一个数学函数来预测因变量的值。

  • 回归定义:通过建立数学模型,研究自变量(X)与因变量(Y)的映射关系 ✨
  • 核心价值:预测连续型变量(如房价预测、销量分析),揭示变量间因果关系
  • 回归模型:预测连续值,如房价、温度、销售额等。

2.2 线性回归

线性回归是回归分析中最简单的一种方法,它假设因变量与自变量之间存在线性关系。

  • 线性回归模型的公式为:

    y=β0+β1x1+β2x2+...+βnxn+ϵy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_n x_n + \epsilon y=β0+β1x1+β2x2+...+βnxn+ϵ

    其中:

    • yyy 是因变量。
    • x1,x2,...,xnx_1, x_2, ..., x_nx1,x2,...,xn 是自变量(特征)。
    • β0\beta_0β0 是截距(模型基准点)。
    • β1,β2,...,βn\beta_1, \beta_2, ..., \beta_nβ1,β2,...,βn 是回归系数(特征权重系数)。
    • ϵ\epsilonϵ 是误差项。

2.3 损失函数

损失函数用于度量模型预测值与实际值之间的误差。在线性回归中,通常使用 均方误差 (MSE) 作为损失函数。

  • 数学本质:误差平方和的期望最小化

  • 几何意义:寻找最佳拟合超平面(高维空间中的直线)📐

  • 均方误差(MSE) 公式:

    MSE=1m∑i=1m(yi−y^i)2MSE = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2 MSE=m1i=1m(yiy^i)2

    其中:

    • yiy_iyi 是实际值。
    • y^i\hat{y}_iy^i 是预测值。
    • mmm 是样本数量。

2.4 多参数回归

在多参数回归中,目标是通过多个特征来预测一个因变量。例如,在房价预测中,可能有多个因素(如面积、房间数量、位置等)影响房价。多参数回归即通过多个自变量来建立线性关系。

3. 参数求解:最小二乘法

最小二乘法(Least Squares)是一种优化方法,常用于线性回归中,用来找到最佳拟合的线。

3.1 最小二乘法 MSE

最小二乘法通过最小化损失函数(MSE)来求解回归系数。在矩阵形式下,最小二乘法的公式为:

β^=(XTX)−1XTy\hat{\beta} = (X^T X)^{-1} X^T y β^=(XTX)1XTy

  • XXX 是样本特征矩阵。
  • yyy 是目标变量。
  • β^\hat{\beta}β^ 是回归系数向量。

前景知识:矩阵相关公式

  • 矩阵运算前提
    • 特征矩阵需满秩(无多重共线性)
    • 样本量 > 特征维度
  • 矩阵转置(AT)T=A(A^T)^T = A(AT)T=A

  • 矩阵逆(AB)−1=B−1A−1(AB)^{-1} = B^{-1}A^{-1}(AB)1=B1A1

    from sklearn.linear_model import LinearRegressionmodel = LinearRegression().fit(X_train, y_train)print(f"系数: {model.coef_}, 截距: {model.intercept_}")

3.2 最小二乘法的优缺点

优点:
  • 简单且易于理解。
  • 对小数据集表现良好,计算效率高。
缺点:
  • 对异常值敏感。
  • 需要满足线性假设。

4. 梯度下降

梯度下降(Gradient Descent)是一种优化算法,用于最小化损失函数。它通过计算损失函数关于参数的梯度,并沿梯度的反方向更新参数。

4.1 梯度下降概念

梯度下降通过迭代的方式不断优化参数,直到找到损失函数的最小值。假设我们有损失函数 L(θ)L(\theta)L(θ),梯度下降的更新公式为:

θ:=θ−α∇θL(θ)\theta := \theta - \alpha \nabla_\theta L(\theta) θ:=θαθL(θ)

  • θ\thetaθ 是模型参数。
  • α\alphaα 是学习率。
  • ∇θL(θ)\nabla_\theta L(\theta)θL(θ) 是损失函数关于参数的梯度。

4.2 梯度下降步骤

  1. 初始化参数:随机或通过某种方式初始化参数。
  2. 计算梯度:计算损失函数对参数的偏导数。
  3. 更新参数:按照梯度反方向更新参数。
  4. 迭代:重复以上步骤,直到损失函数收敛或达到最大迭代次数。

4.3 梯度下降公式

损失函数 L(θ)L(\theta)L(θ) 相对于参数 θ\thetaθ 的梯度计算公式为:

∇θL(θ)=∂∂θ(1m∑i=1m(yi−y^i)2)\nabla_\theta L(\theta) = \frac{\partial}{\partial \theta} \left( \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2 \right) θL(θ)=θ(m1i=1m(yiy^i)2)

4.4 学习率

学习率(α\alphaα)决定了每次更新的步长大小。选择一个合适的学习率非常重要:

  • 学习率过大,可能导致跳过最优解。
  • 学习率过小,收敛速度会很慢。

4.5 自己实现梯度下降

import numpy as np# 假设数据集X和y已经准备好
def gradient_descent(X, y, theta, alpha=0.01, iterations=1000):m = len(y)cost_history = []for i in range(iterations):predictions = X.dot(theta)error = predictions - ygradient = (1/m) * X.T.dot(error)theta = theta - alpha * gradientcost = (1/2*m) * np.sum(np.square(error))cost_history.append(cost)return theta, cost_history# 初始化theta,假设X和y已经定义
theta_initial = np.zeros(X.shape[1])
theta, cost_history = gradient_descent(X, y, theta_initial, alpha=0.01, iterations=1000)

4.6 梯度下降的变种

BGD(批量梯度下降)

在批量梯度下降中,每次迭代都使用整个训练集计算梯度。它收敛稳定,但计算量大,尤其在数据集较大时。

SGD(随机梯度下降)

在随机梯度下降中,每次迭代使用一个样本来计算梯度,收敛较快,但噪声大。

MBGD(小批量梯度下降)

小批量梯度下降结合了BGD和SGD的优点。每次迭代使用一个小批量的样本进行计算,能有效减少计算开销并加速收敛。

4.7 梯度下降优化

为加速梯度下降的收敛速度,可以使用动量法(Momentum)、**自适应梯度(AdaGrad)**等优化算法。

5. 使用场景

  • 线性回归:适用于预测房价、销售量、温度等连续变量,尤其是特征之间存在线性关系时。
  • 梯度下降:适用于大数据集或高维数据集,尤其是在无法直接求解闭式解(如最小二乘法)时。

6. 优缺点

6.1 线性回归

优点:
  • 简单易懂。
  • 计算效率高,尤其是数据量小的时候。
缺点:
  • 对异常值敏感。
  • 假设特征与目标变量之间存在线性关系。

6.2 梯度下降

优点:
  • 适用于大规模数据集,尤其是在线性回归无法使用最小二乘法时。
  • 可以处理复杂的非线性模型。
缺点:
  • 可能收敛到局部最优解。
  • 需要选择合适的学习率。

7. 总结

本文介绍了线性回归梯度下降的基本理论及实现方法,分析了它们的优缺点和应用场景。通过结合这些方法,能够为不同的数据问题提供高效的解决方案。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95303.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95303.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95303.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端,elment-plus组件:表格,分页,对话框,表单

Element Plus 核心特性组件体系:表单、表格、弹窗、导航等高频组件设计理念主题定制:Sass 变量覆盖与暗黑模式无缝切换国际化支持:多语言动态切换的实现机制TypeScript 支持:完整的类型定义与开发友好性快速上手指南安装与基础配置…

【LeetCode】6. Z 字形变换

文章目录6. Z 字形变换题目描述示例 1:示例 2:示例 3:提示:解题思路算法分析问题本质分析Z字形排列过程详解Z字形排列可视化方向控制策略数学规律法详解各种解法对比算法流程图边界情况处理时间复杂度分析空间复杂度分析关键优化点…

spring文件下载的方式

spring文件下载的方式方式一:通过ResponseEntity<Resource> 方式来下载方式二:通过ResponseEntity<StreamingResponseBody> 方式来下载方式三:通过Servlet原生下载方式四:通过ResponseEntity<byte[]> 方式来下载四种下载方式的对比1、核心特性对比2、典型场景…

写一个redis客户端软件,参考 Another Redis Desktop Manager 的设计风格。

一个基于 Electron 开发的现代化 Redis 桌面客户端&#xff0c;参考 Another Redis Desktop Manager 的设计风格。 github仓库地址 https://github.com/henkuoai/redis-man-pc

Web3: DeFi借贷的安全基石, 了解喂价与清算机制的原理与重要性

今天我们要聊一个DeFi世界里至关重要&#xff0c;但又时常被误解的话题&#xff1a;为什么DeFi协议需要定期更新喂价和执行清算&#xff1f; 如果大家参与过DeFi借贷&#xff0c;大家可能看到过“清算”这个词&#xff0c;甚至会有点谈虎色变。但实际上&#xff0c;清算和为其提…

「iOS」————响应者链与事件传递链

iOS学习响应者链和事件传递链传递链&#xff1a;hitTest:withEvent**pointInside:withEvent**响应链第一响应者和最佳响应者触摸事件&#xff08;UITouch&#xff09;UIGestureRecognizer&#xff08;手势识别器&#xff09;响应者链和事件传递链 iOS事件的主要由&#xff1a;…

修复图像、视频和3D场景的AI工具–Inpaint Anything

TL; DR&#xff1a;用户可以通过单击来选择图像中的任何对象。借助强大的视觉模型&#xff0c;例如SAM、LaMa和稳定扩散 (SD)&#xff0c;Inpaint Anything能够顺利地移除对象&#xff08;即Remove Anything&#xff09;。此外&#xff0c;在用户输入文本的提示下&#xff0c;I…

java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案

xxx.jar 中没有主清单属性 &#xff08;no main manifest attribute&#xff09;解决方案 java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案 这个错通常出现在你用 java -jar xxx.jar 启动&#xff0c;但 JAR 的 META-INF/MANIFEST.MF 里没有 Main-Class 条目&#…

Myqsl建立库表练习

目录 一、windows中选择一种方式安装Mysql8.0 二、新建产品库mydb6_product 1. 新建3张表如下&#xff1a; 1&#xff09;employees表 2&#xff09;orders表 3&#xff09;invoices表 三、新建员工库mydb8_worker&#xff0c;添加自定义表内容并插入数据 1. 新建库表 2. 插…

STM32 输入捕获,串口打印,定时器,中断综合运用

实验目的 使用定时器 2 通道 2 来捕获按键 2 按下时间&#xff0c;并通过串口打印。 计一个数的时间&#xff1a;1us&#xff0c;PSC71&#xff0c;ARR65535 下降沿捕获、输入通道 2 映射在 TI2 上、不分频、不滤波输入捕获原理定时器输入捕获实验配置步骤测量按键按下时长思路…

Nacos-2--Nacos1.x版本的通信原理

在Nacos 1.x版本中&#xff0c;客户端长轮询&#xff08;Long Polling&#xff09;和服务端UDP主动推送是两种不同的机制&#xff0c;分别用于配置管理和服务发现场景。它们的核心目标都是实现动态更新的实时感知&#xff0c;但实现方式、数据内容和适用场景完全不同。 1、长轮…

机器学习——09 聚类算法

1 聚类算法聚类算法&#xff1a; 是一种无监督学习算法&#xff0c;它不需要预先知道数据的类别信息&#xff0c;而是根据样本之间的相似性&#xff0c;将样本划分到不同的类别中&#xff1b;不同的相似度计算方法&#xff0c;会得到不同的聚类结果&#xff0c;常用的相似度计算…

生成式AI应用生态的爆发与专业化演进:从零和博弈到正和共赢

2025年,生成式AI产业规模已突破7000亿元,全球生成式AI市场规模预计在2028年达到2842亿美元(IDC数据)。在这场技术革命中,AI基础模型的分化已证明:差异化竞争而非同质化替代,才是推动产业发展的核心逻辑。如今,这一规律正从基础模型层向应用生成平台层蔓延——Lovable、…

Mysql——Sql的执行过程

目录 一、Sql的执行过程流程图解 二、Sql的执行过程流程 1.2.1、建立连接 1.2.2、服务层(缓存、解析器、预处理器、优化器、执行器) 1.2.2.1、缓存 1.2.2.2、解析器 1.2.2.3、预处理器 1.2.2.4、优化器 1.2.2.5、执行器 1.2.3、引擎层 一、Sql的执行过程流程图解 Sql的执行过…

【Axure高保真原型】地图路线和定位

今天和大家分享地图路线和定位的原型模版&#xff0c;载入后&#xff0c;可以查看汽车行进路线和所在定位 提供了停靠和不停靠站点两个案例&#xff0c;具体效果可以打开下方原型地址体验或者点击下方视频观看 【Axure高保真原型】地图路线和定位【原型预览含下载地址】 https…

【96页PPT】华为IPD流程管理详细版(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91633108 资料解读&#xff1a;华为IPD流程管理详细版 详细资料请看本解读文章的最后内容 华为的集成产品开发&#xff08;IPD&#xff09;…

深度解析Mysql的开窗函数(易懂版)

SQL 开窗函数&#xff08;Window Function&#xff09;是一种强大的分析工具&#xff0c;它能在保留原有数据行的基础上&#xff0c;对 "窗口"&#xff08;指定范围的行集合&#xff09;进行聚合、排名或分析计算&#xff0c;解决了传统GROUP BY聚合会合并行的局限性…

Java静态代理和动态代理

Java静态代理和动态代理 静态代理 现在有一个计算类&#xff0c;有四个方法&#xff0c;加减乘除&#xff0c;如果需要给这四个方法都加上同一个逻辑&#xff0c;可以创建一个类作为代理类&#xff0c;把计算类注入到这个类中&#xff0c;然后再代理类中定义方法&#xff0c;并…

MySQL——MySQL引擎层BufferPool工作过程原理

目录一、MySQL引擎层BufferPool工作过程图解二、MySQL引擎层BufferPool工作过程原理一、MySQL引擎层BufferPool工作过程图解 图解 二、MySQL引擎层BufferPool工作过程原理 首先关闭自动提交&#xff0c;执行一条修改语句。 SET AUTOCOMMIT 0; update employees set name张三…

Python初学者笔记第二十二期 -- (JSON数据解析)

第31节课 JSON数据解析 1.JSON基础概念 JSON 是一种轻量级的数据交换格式&#xff08;另一个叫XML&#xff09;&#xff0c;具有简洁、易读的特点&#xff0c;并且在不同编程语言之间能很好地实现数据传递。在 Python 中&#xff0c;json模块能够实现 Python 数据类型与 JSON 数…