首页 > 其他分享 >线性回归之基础篇

线性回归之基础篇

时间:2024-07-04 20:58:01浏览次数:18  
标签:函数 导数 回归 基础 SSE 拟合 线性

简介

通常在C编程中,我们会采用线性回归或多项式拟合方法,用于拟合多个坐标点的数据。而线性回归是一种最为常见的拟合技术,它通过最小二乘法来估计回归系数,以找到使误差函数最小化的参数值。在这个过程中,我们需要运用偏导数和链式法则等微积分概念,以计算参数的导数,从而优化误差函数。需要特别注意的是,线性回归的导数计算与一元函数的导数计算在方法上存在差异。

线性回归模型

线性回归是一种常用的统计方法,用于在实际场景中拟合和分析两个或多个变量之间的线性关系。在简单线性回归中,我们通常使用线性方程 Y = kx + b 来拟合坐标散点,其中:

  • Y 代表因变量(也称为响应变量或目标变量),它是我们想要预测或解释的变量。
  • x 代表自变量(也称为解释变量或特征),它是用来预测或解释因变量的变量。
  • k 是斜率(也称为回归系数),表示每单位 x 变化时 Y 的变化量。
  • b 是截距,表示当 x 等于零时,Y 的值。

线性回归的目标是找到最佳的斜率k 和截距 b。

线性拟合

线性拟合通常指的是在一组数据点中寻找最佳拟合直线的方法。给定 n 个数据点 (x1, y1), (x2, y2),…, (xn, yn),我们可以使用最小二乘法求解线性拟合方程。
假设线性拟合的方程为 y = a * x + b,其中 a 和 b 是我们需要求解的参数。
根据最小二乘法,我们可以通过以下公式计算 a 和 b:
a = (n * Σ(xi * yi) - Σxi * Σyi) / (n * Σ(xi * xi) - (Σxi)^2)
b = (Σyi - a * Σxi) / n
其中,Σ表示求和,xi 和 yi 分别表示数据集中的 x 值和 y 值。
通过上述公式,我们可以得到线性拟合的方程,从而对数据集进行最佳拟合。

最小二乘法

最小二乘法是一种常用于参数估计的方法,特别是在线性回归中。它的目标是找到一组参数,使模型(理论值)与观测数据(实测值)之间的残差平方和最小化。在线性回归中,最小二乘法被用来拟合一个线性模型到实际数据,以便估计回归系数(如截距和斜率),使拟合线尽可能地接近数据点。
考虑一个简单的线性回归模型:
Y = kx + b
最小二乘法的目标是通过最小化误差函数SSE来估计k和b,其中:
SSE = Σ(Yi-(b+kxi))2
通过最小化SSE来找到最佳的k和b的值。

偏导数:

偏导数是微积分中的一个概念,用于计算多元函数相对于各个变量的导数。它告诉我们函数在每个自变量方向的变化率,同时将其他自变量保持不变。在线性回归中,我们使用偏导数来计算误差函数相对于回归系数的导数,以找到最小误差函数的参数值。
考虑误差函数SSE,我们想计算对于b的偏导数。这个偏导数告诉我们在保持k不变的情况下,误差函数SSE对于k的变化率。这个偏导数为:
d(SSE)/dB = ∑d(SSE)/du * du/db = ∑2(Yi-(b+kxi))*(-1);

链式法则:

链式法则是微积分中的一个关键规则,用于计算复合函数的导数,当一个函数包含两一个函数时,链式法则告诉我们如何计算这两个函数的导数只积。在线回归中,链式法则用于计算误差函数相对于模型参数的导数,因为误差函数包含了内部函数,例如每个数据点的模型预测与实际值之间的差异。
考虑误差函数SSE,其中u时内部函数:
u=Yi-(b+kxi);
我们使用链式法则来计算d(SSE)/db。首先d(SSE)/du,然后计算du/db,最终将两者相乘。

完整示例

首先,我们定义残差(Residual)为观测值(实际的Y值)与模型预测值之间的差异:Residual = Y - (β₀ + β₁X)
残差平方和(Sum of Squared Residuals)表示所有数据点的残差的平方之和:SSE = Σ(Residual)²,其中,Σ 表示对所有数据点求和。
最小二乘法的目标是最小化 SSE,也就是找到最佳的β₀ 和 β₁ 来使 SSE 最小。为了实现这一目标,我们需要计算 SSE 对于 β₀ 和 β₁ 的偏导数,并将它们设为零,然后解出 β₀ 和 β₁。
对于β₀,我们计算 SSE 对 β₀ 的偏导数,并将其设为零:
d(SSE)/dβ₀ = -2Σ(Y - (β₀ + β₁X)) = 0
这样,我们可以解出β₀:
ΣY - Σβ₀ - β₁ΣX = 0;β₀ = (ΣY - β₁ΣX) / n,这就是截距的估计值。
对于β₁,我们计算 SSE 对 β₁ 的偏导数,并将其设为零:
d(SSE)/dβ₁ = -2ΣX(Y - (β₀ + β₁X)) = 0
这样,我们可以解出β₁:
ΣXY - β₀ΣX - β₁Σ(X²) = 0,用β₀ 的估计值代入,得到:
ΣXY - ((ΣY - β₁ΣX) / n)ΣX - β₁Σ(X²) = 0
然后,将所有项移到一边:
ΣXY - ((ΣYΣX - β₁(ΣX)²) / n) - β₁Σ(X²) = 0
继续整理,我们得到:
ΣXY - (ΣYΣX / n) + (β₁(ΣX)² / n) - β₁Σ(X²) = 0,
然后,将所有包含β₁ 的项移到一边:
β₁(Σ(X²) - (ΣX)² / n) = ΣXY - (ΣYΣX / n)
最后,解出β₁:
β₁ = (ΣXY - (ΣYΣX / n)) / (Σ(X²) - (ΣX)² / n)
这就是斜率的估计值。

标签:函数,导数,回归,基础,SSE,拟合,线性
From: https://blog.csdn.net/Zhuo3364/article/details/140163698

相关文章

  • 当管理和维护 Active Directory 环境时,有一些基础的 PowerShell 命令可以帮助进行常规
    当管理和维护ActiveDirectory环境时,有一些基础的PowerShell命令可以帮助进行常规的检查和管理操作。以下是一些常用的基础检查命令示例:1.获取特定用户信息powershellCopyCode#获取特定用户的基本信息Get-ADUser-Identity"username"这个命令用于获取特定用户的基本......
  • day62--若依框架(基础应用篇)
    若依搭建若依版本官方若依官方针对不同开发需求提供了多个版本的框架,每个版本都有其独特的特点和适用场景:前后端混合版本:RuoYi结合了SpringBoot和Bootstrap的前端开发框架,适合快速构建传统的Web应用程序,其中前端和后端代码在同一项目中协同工作。前后端分离版本:RuoYi-Vu......
  • Java基础:线程的三种创建方式
    一、继承Thread类定义一个类继承线程类Thread重写run()方法创建线程对象调用线程对象的start()方法创建线程Thread类的常用APIsetName(Stringname):给线程取名字getName():获取线程的名字publicstaticThreadcurrentThread():获取当前线程对象,这个代码在哪个线程中就获......
  • Android Systrace 基础知识 -- 分析 Systrace 预备知识
    1.正文1.1线程状态查看Systrace会用不同的颜色来标识不同的线程状态,在每个方法上面都会有对应的线程状态来标识目前线程所处的状态,通过查看线程状态我们可以知道目前的瓶颈是什么,是cpu执行慢还是因为Binder调用,又或是进行io操作,又或是拿不到cpu时间片绿色:......
  • python基础操作
    pip常用命令列出已安装的所有库:piplist显示包信息:pipshow库名下载库:pipdownload库名python库的安装方式1、pipinstall库名-ihttps://mirrors.aliyun.com/pypi/simple(国内镜像库速度更快)方式2、pipinstallwhl文件路径方式3、解压后的安装包路径下,pythonsetup.pyinstal......
  • k8s实战 ---- pod 基础
    如果你对k8s还不了解,可以看下前文k8s实战1----初识    (https://www.cnblogs.com/jilodream/p/18245222)什么是pod,pod在英文中是豌豆荚、分离仓、集装箱的意思。在k8s中,pod就是融合一堆容器实例的一个大容器(称之为集合更贴切)。K8s所能部署的最小单元就是容器,就是pod,一......
  • PKI公钥基础设施
    PKI体系架构PKI是PublicKeyInfrastructure的缩写,是通过使用公钥技术和数字证书来提供系统信息安全服务,并负责验证数字证书持有者身份的一种体系。一个PKI体系由终端实体、证书认证机构、证书注册机构和证书/CRL存储库四部分共同组成的终端实体EE(EndEntity):也称为PKI实体......
  • 基础篇:Stable Diffusion 基础原理详述
    【基础篇】StableDiffusion基础原理详述前言我认为学习ComfyUI应该先从理论学起。与传统绘图工具(如Photoshop或Figma)相比,AI绘图工具有着显著不同。首先,许多设置和操作在AI绘图工具中是非可视化的,这意味着即使你更改了某个配置,界面上也未必会有任何变化,这使得自学变得更......
  • 深入理解线程与进程:从基础概念到实际应用
    1.什么是线程和进程?进程:进程是操作系统分配资源和调度的基本单位,它是一个正在运行的程序,每个进程都有独立的内存空间和系统资源。一个程序可以同时启动多个进程。线程:线程是进程中的一个执行单元,负责执行程序的代码。一个进程可以包含多个线程,这些线程共享进程的内存空间......
  • 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    想要成为黑客,却苦于没有方向,不知道从何学起,下面这篇黑客入门教程可以帮你实现自己的黑客梦想,如果想学,可以继续看下去,文章有点长,希望你可以耐心看到最后 1、Web安全相关概念(2周)·熟悉基本概念(SQL注入、上传、XSS、、CSRF、一句话木马等)。通过关键字(SOL注入、上传、XSSC......