最小二乘法的实现与线性回归的应用

2023-11-09

1. 简介

简单线性回归中,您有一个因变量y和一个自变量X。该模型可以表示为:

y = m x + b y=mx+b y=mx+b

其中

  • x x x: 自变量
  • y y y: 因变量
  • m m m: 斜率
  • b b b: 截距

最小二乘法是回归分析中用于估计线性回归模型参数的标准方法。它可以最小化误差的平方和,从而找到数据的最佳拟合直线。

在这里,误差是实际值和预测值之间的差异。实际值是观察到的值,而预测值是模型的估计值。

在这里,我们将使用最小二乘法来估计线性回归模型的参数。我们将使用以下公式来计算回归系数:

s s h = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 ssh = \sum_{i=1}^{n}(y_i - (mx_i+b))^2 ssh=i=1n(yi(mxi+b))2

根据链式法则,我们可以计算偏导数:

链式法则:

∂ ∂ x [ f ( g ( x ) ) ] = f ′ ( g ( x ) ) ⋅ g ′ ( x ) \frac{\partial}{\partial x}[f(g(x))] = f'(g(x)) \cdot g'(x) x[f(g(x))]=f(g(x))g(x)

公示得出,复合函数的导数等于外函数的导数乘以内函数的导数。

设: u = y i − ( m x i + b ) u=y_i - (mx_i+b) u=yi(mxi+b)

所以:

∂ ∂ x [ f ( g ( x ) ) ] = u 2 ⋅ ( y i − ( m x i + b ) ) \frac{\partial}{\partial x}[f(g(x))] = u^2 \cdot (y_i - (mx_i+b)) x[f(g(x))]=u2(yi(mxi+b))

导数规则:

  • 常数: f ( x ) = c f(x)=c f(x)=c的导数为0
  • 幂规则: f ( x ) = x n f(x)=x^n f(x)=xn的导数为 n x n − 1 nx^{n-1} nxn1
  • 乘法常数规则: f ( x ) = c ⋅ g ( x ) 的导数为 c ⋅ g ′ ( x ) f(x)=c \cdot g(x)的导数为c \cdot g'(x) f(x)=cg(x)的导数为cg(x)
  • 和差规则: f ( x ) = g ( x ) ± h ( x ) f(x)=g(x) \pm h(x) f(x)=g(x)±h(x)的导数为 g ′ ( x ) ± h ′ ( x ) g'(x) \pm h'(x) g(x)±h(x)
  • 乘法规则: f ( x ) = g ( x ) ⋅ h ( x ) f(x)=g(x) \cdot h(x) f(x)=g(x)h(x)的导数为 g ′ ( x ) ⋅ h ( x ) + g ( x ) ⋅ h ′ ( x ) g'(x) \cdot h(x) + g(x) \cdot h'(x) g(x)h(x)+g(x)h(x)
  • 链式法则: f ( x ) = g ( h ( x ) ) f(x)=g(h(x)) f(x)=g(h(x))的导数为 g ′ ( h ( x ) ) ⋅ h ′ ( x ) g'(h(x)) \cdot h'(x) g(h(x))h(x)

因为是二次方,所以使用幂规则:( u 2 u^2 u2的导数为 2 u 2u 2u

∂ ∂ m = 2 u ⋅ ( − x i ) \frac{\partial }{\partial m} = 2u \cdot (-x_i) m=2u(xi)

∂ ∂ m = − 2 x i ⋅ ( y i − ( m x i + b ) ) \frac{\partial }{\partial m} = -2x_i \cdot (y_i - (mx_i+b)) m=2xi(yi(mxi+b))

因为0的0次方等于1,所以:

∂ ∂ b = − 2 u ⋅ 1 \frac{\partial }{\partial b} = -2u \cdot 1 b=2u1

∂ b ∂ b = − 2 ( y i − ( m x i + b ) ) \frac{\partial b}{\partial b} = -2(y_i - (mx_i+b)) bb=2(yi(mxi+b))

我们可以通过求导数来找到最小值。我们将导数设置为0,然后解出m和b。

∂ s s h ∂ m = − 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 \frac{\partial ssh}{\partial m} = -2 \sum_{i=1}^{n}x_i(y_i - (mx_i+b)) = 0 mssh=2i=1nxi(yi(mxi+b))=0

∂ s s h ∂ b = − 2 ∑ i = 1 n ( y i − ( m x i + b ) ) = 0 \frac{\partial ssh}{\partial b} = -2 \sum_{i=1}^{n}(y_i - (mx_i+b)) = 0 bssh=2i=1n(yi(mxi+b))=0

∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 \sum_{i=1}^{n}x_i(y_i - (mx_i+b)) = 0 i=1nxi(yi(mxi+b))=0

∑ i = 1 n ( y i − ( m x i + b ) ) = 0 \sum_{i=1}^{n}(y_i - (mx_i+b)) = 0 i=1n(yi(mxi+b))=0

∑ i = 1 n x i y i − m ∑ i = 1 n x i 2 − b ∑ i = 1 n x i = 0 \sum_{i=1}^{n}x_iy_i - m\sum_{i=1}^{n}x_i^2 - b\sum_{i=1}^{n}x_i = 0 i=1nxiyimi=1nxi2bi=1nxi=0

∑ i = 1 n y i − m ∑ i = 1 n x i − n b = 0 \sum_{i=1}^{n}y_i - m\sum_{i=1}^{n}x_i - nb = 0 i=1nyimi=1nxinb=0

接下来,我们将解出m和b。

关于b的方程:

n b = ∑ i = 1 n y i − m ∑ i = 1 n x i nb = \sum_{i=1}^{n}y_i - m\sum_{i=1}^{n}x_i nb=i=1nyimi=1nxi

b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n} b=ni=1nyimi=1nxi

关于m的方程:

我们已知b的值,所以我们可以将其代入方程中:

∑ i = 1 n x i y i − m ∑ i = 1 n x i 2 − ∑ i = 1 n y i − m ∑ i = 1 n x i n ∑ i = 1 n x i = 0 \sum_{i=1}^{n}x_iy_i - m\sum_{i=1}^{n}x_i^2 - \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n}\sum_{i=1}^{n}x_i = 0 i=1nxiyimi=1nxi2ni=1nyimi=1nxii=1nxi=0

乘n消除分母:

n ∑ i = 1 n x i y i − m n ∑ i = 1 n x i 2 − ( ∑ i = 1 n y i − m ∑ i = 1 n x i ) ∑ i = 1 n x i = 0 n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i)\sum_{i=1}^{n}x_i = 0 ni=1nxiyimni=1nxi2(i=1nyimi=1nxi)i=1nxi=0

n ∑ i = 1 n x i y i − m n ∑ i = 1 n x i 2 − ∑ i = 1 n y i ∑ i = 1 n x i + m ∑ i = 1 n x i ∑ i = 1 n x i = 0 n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i + m\sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_i = 0 ni=1nxiyimni=1nxi2i=1nyii=1nxi+mi=1nxii=1nxi=0

n ∑ i = 1 n x i y i − m n ∑ i = 1 n x i 2 − ∑ i = 1 n y i ∑ i = 1 n x i + m ( ∑ i = 1 n x i ) 2 = 0 n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i + m(\sum_{i=1}^{n}x_i)^2 = 0 ni=1nxiyimni=1nxi2i=1nyii=1nxi+m(i=1nxi)2=0

得出mn的方程:

m n ∑ i = 1 n x i 2 − m ( ∑ i = 1 n x i ) 2 = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i mn\sum_{i=1}^{n}x_i^2 - m(\sum_{i=1}^{n}x_i)^2 = n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i mni=1nxi2m(i=1nxi)2=ni=1nxiyii=1nyii=1nxi

m ( n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 ) = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i m(n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2) = n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i m(ni=1nxi2(i=1nxi)2)=ni=1nxiyii=1nyii=1nxi

m = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i}{n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2} m=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nyii=1nxi

此时,我们已经得到了m和b的值。分别为:

m = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i}{n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2} m=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nyii=1nxi

b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n} b=ni=1nyimi=1nxi

简写为:

m = n ( ∑ x y ) − ( ∑ x ) ( ∑ y ) n ( ∑ x 2 ) − ( ∑ x ) 2 m = \frac{n(\sum_{}^{}xy) - (\sum_{}^{}x)(\sum_{}^{}y)}{n(\sum_{}^{}x^2) - (\sum_{}^{}x)^2} m=n(x2)(x)2n(xy)(x)(y)

b = ∑ y − m ( ∑ x ) n b = \frac{\sum_{}^{}y - m(\sum_{}^{}x)}{n} b=nym(x)

我们可以使用这些公式来计算m和b的值。然后,我们可以使用这些值来计算预测值。

2. 代码实现

2.1 导入库

import numpy as np
import matplotlib.pyplot as plt

2.2 生成数据

x = np.array([1, 2])
y = np.array([2, 3])

在这里插入图片描述

2.3 计算m和b的值

n = len(x)
m = (n * np.sum(x * y) - np.sum(x) * np.sum(y)) / (n * np.sum(x ** 2) - np.sum(x) ** 2)
b = (np.sum(y) - m * np.sum(x)) / n
m,b

得出结果:

(1.0, 1.0)

2.4 计算预测值

根据线性回归模型:

y = m x + b y=mx+b y=mx+b

因为m和b的值都为1,所以:

y = x + 1 y=x+1 y=x+1

假设x为3,那么y的值为:

y = 3 + 1 = 4 y=3+1=4 y=3+1=4

在这里插入图片描述

3. 其他

你可以记录下来,然后使用这些公式来计算m和b的值。然后,您可以使用这些值来计算预测值。

我们使用的值比较简单,你可以尝试使用更多的值来计算m和b的值。不过,这些值必须是线性相关的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最小二乘法的实现与线性回归的应用 的相关文章

随机推荐

  • MVVM 框架

    在 MVVM Light 框架中 事件是 WPF 应用程序中 UI 与后台代码进行交互的最主要方式 与传统方式不 同 mvvm 中主要通过绑定到命令来进行事件的处理 因此要了解 mvvm 中处 理事件的方式 就必须先熟悉命令的工作原理 命令
  • 关于编译性语言、解释性语言和脚本语言的区别

    计算机是不能理解高级语言 当然也就不能直接执行高级语言了 计算机只能直接理解机器语言 所以任何语言 都必须将其翻译成机器语言 计算机才能运行高级语言编写的程序 一 翻译和解释的不同 翻译的方式有两种 一个是编译 一个是解释 两种方式只是翻译
  • CUDA编程性能分析工具 nvprof/ncu --metrics参数含义

    摘要 在网上没有比较全的中文 ncu metrics 参数含义 于是自己整理了一下官方和外国友人的笔记 nvprof 和 ncu nvprof 是过去比较常用的命令行工具 但在终端直接输入nvprof o会得到以下 Warning Warn
  • 宝塔 ssl https无法访问使用

    https 使用的是443端口 请确保 云上的与宝塔上的443端口开放即可 转载于 https www cnblogs com wdw31210 p 11058824 html
  • 用手绘画图方式解释numpy.mgrid函数的二维三维数组

    这个np mgrid 起始值 结束值 步长 起始值 结束值 步长 表示的一个 起始值 结束值 的数组 其中间隔为步长 而x ravel 将x变为一维数组 把 前变量拉直 这样讲很难理解 直接看例子 来吧 1 首先看这个二维数组例子 impo
  • Linux、网络编程

    1 linux系统内核态和用户态是什么 有什么区别 当一个进程在执行用户自己的代码时处于用户运行态 用户态 当一个进程因为系统调用陷入内核代码中执行时处于内核运行态 内核态 用户运行一个程序 该程序创建的进程开始时运行自己的代码 处于用户态
  • 3DMax 不断崩溃,常见的5种处理方案!

    Autodesk 3DS Max 是一种流行的 3D 建模和动画软件 被图形设计和游戏行业的许多专业人士使用 但是 与任何其他软件一样 用户会遇到崩溃问题 本文列出了 5种常见的解决方案 用于排除故障并解决 3DS Max 崩溃问题 Aut
  • Mysql 的 聚簇索引和二级索引

    原文地址 聚簇索引和二级索引 增加部分补充和理解 目录 1 索引的简述 1 聚簇索引 2 非聚簇索引 二级索引 辅助索引 2 示例 聚簇索引 主键索引 二级索引 辅助索引 3 结论 结论一 结论二 写在前面 针对原博主的讲述 网友提出相应补
  • 【算法】骑士周游 ---递归的说明

    因为说明中没有对应具体代码 请先看最下方代码在看说明 普通递归 创建一个二维空表做棋盘 用step记录走过的步数 用来增加条件判断游戏是否成功 棋盘上记录步数 使用visted记录是否该点是否走过 一张一维标记对应二位棋盘是否已走过 递归的
  • ElasticSearch RestHighLevelClient 教程(三) 删除&&查

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net paditang article details 79172837 前言 删除文档作为
  • C语言在字符串中删除特定字符

    当出现特定字符的位置用一个新定义的字符串进行类似跳过特定字符的操作 输入 s 输出 adlfjaljgowea include include void delSpace char s char c int main char str 80
  • xss跨站之代码及http only绕过

    什么是http only 在cookie中设置了http only属性 那么通过js代码无法获取cookie 并不能防止xss漏洞 在上一节的靶场网站源代码里面 写上这一串代码就是启动http only 再加上带去cookie的代码 然后我
  • Hibernate工作原理(图解)

    在 Hibernate操作数据库一节的学习中 我们主要涉及到了 Configuration SessionFactory Session Transaction 和 Query 等多个接口 这些接口在 Hibernate 运行时都扮演着十分
  • 货币银行学入门知识

    用IT技术玩金融系列文章 将介绍如何使用IT技术 处理金融大数据 在互联网混迹多年 已经熟练掌握一些IT技术 单纯地在互联网做开发 总觉得使劲的方式不对 要想靠技术养活自己 就要把技术变现 通过 跨界 可以寻找新的机会 创造技术的壁垒 金融
  • ncl泰勒图(均方根误差、标准差、相关系数)

    最近学习了一下泰勒图的做法 对2001年泰勒的文章进行了简单学习 说一点自己的理解 泰勒图一般是用来评估多个模式对观测数据的模拟能力 包括标准差 中心型均方根误差 相关系数这三部分 这三部分可以构建一个三角关系 相关系数是用来量化模式之间的
  • SQLyog安装教程详解

    安装SQLyog的详细步骤 1 复制连接 https pan baidu com s 19DHHrCqvg 0 StazHqGhcg 提取码 1111 2 等待下载 3 解压到新建文件夹 4 点击解压后的X64 右键 以管理员的身份运行 5
  • WEB前端网页设计-Bootstrap5 提示框 & JavaScript 对象

    目录 Bootstrap5 提示框 如何创建提示框 指定提示框的位置 JavaScript 对象 真实生活中的对象 属性和方法 JavaScript 对象 对象定义 实例 实例 对象属性 访问对象属性 实例 1 实例 2 对象方法 实例 实
  • PostgreSQL一些常用命令

    最近一直在学习Postgresql 下面是自己整理的Postgresql的常用命令 连接数据库 默认的用户和数据库是postgres psql U user d dbname 切换数据库 相当于mysql的use dbname c dbna
  • shuffleNet V2

    论文出发点 旨在设计一个轻量级但是保证精度 速度的深度网络 分析当前 1 直接用FLOP来衡量算力 不够准确 因为不同的网路 即使参数量相同 模型大小相同 但是模型速度还是存在差异 改为直接用速度 speed 来衡量 2 直接影响速度的因素
  • 最小二乘法的实现与线性回归的应用

    1 简介 简单线性回归中 您有一个因变量y和一个自变量X 该模型可以表示为 y m x b y mx b y