【机器学习】数据拟合-最小二乘法(Least Squares Method)

最小二乘法(Least Squares Method)

最小二乘法是一种广泛使用的数据拟合方法,用于在统计学和数学中找到最佳拟合曲线或模型,使得观测数据点与模型预测值之间的误差平方和最小化。以下是详细介绍:


基本概念

  • 假设有一组观测数据点 (x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n),希望找到一个模型 y = f(x),使得模型预测值 f(x_i) 与实际观测值 y_i 的误差最小。
  • 定义误差为: e_i = y_i - f(x_i)
  • 最小二乘法的目标是最小化误差平方和:

    S = \sum_{i=1}^n e_i^2 = \sum_{i=1}^n \left(y_i - f(x_i)\right)^2

线性最小二乘法

最常见的情况是线性模型,即 f(x) = a + b。通过最小化平方误差,计算出最佳拟合的参数 a 和 b。

  1. 目标函数

    S = \sum_{i=1}^n \left(y_i - (a + bx_i)\right)^2
  2. 求解公式: 通过对 S 分别对 a 和 b 求偏导并令其为 0,得到方程组:

    \frac{\partial S}{\partial a} = 0, \quad \frac{\partial S}{\partial b} = 0
     

    解得:

    b = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^n (x_i - \bar{x})^2}, \quad a = \bar{y} - b\bar{x}
     

    其中,\bar{x}\bar{y}​ 分别是 x_iy_i​ 的平均值。

  3. 代码实现:

    import numpy as np
    import matplotlib.pyplot as plt# 示例数据
    x = np.array([1, 2, 3, 4, 5])  # 自变量
    y = np.array([2.2, 2.8, 3.6, 4.5, 5.1])  # 因变量# 计算最小二乘法参数
    n = len(x)
    x_mean = np.mean(x)
    y_mean = np.mean(y)# 根据公式计算斜率和截距
    b = np.sum((x - x_mean) * (y - y_mean)) / np.sum((x - x_mean) ** 2)
    a = y_mean - b * x_meanprint(f"拟合直线方程:y = {a:.2f} + {b:.2f}x")# 使用拟合直线进行预测
    y_pred = a + b * x# 绘制散点图和拟合直线
    plt.scatter(x, y, color="blue", label="实际数据点")
    plt.plot(x, y_pred, color="red", label="拟合直线")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.legend()
    plt.title("最小二乘法线性回归")
    plt.show()
    
运行结果
  1. 输出拟合直线方程:

    拟合直线方程:y = 1.39 + 0.75x

  2. 绘制图形:

    • 蓝色散点表示原始数据。
    • 红色直线表示最小二乘法拟合的直线。 

扩展:非线性最小二乘法

  • 如果模型 f(x) 是非线性的(如指数、对数、幂函数等),需要使用数值优化方法(如梯度下降、牛顿法)求解最优参数。
  • 常用软件工具(如 MATLAB、Python 的 SciPy 库)提供了实现非线性最小二乘法的函数。
使用 SciPy 实现非线性最小二乘法

如果你的模型是非线性的(例如 y=aebxy = a e^{bx}y=aebx),可以使用 SciPy 的 curve_fit 方法:

代码实现
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fitplt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False# 示例数据
x = np.array([1, 2, 3, 4, 5])  # 自变量
y = np.array([2.2, 2.8, 3.6, 4.5, 5.1])  # 因变量# 定义非线性模型,例如 y = a * e^(b * x)
def model(x, a, b):return a * np.exp(b * x)# 示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.7, 7.4, 20.1, 54.6, 148.4])  # 模拟非线性数据# 拟合模型
params, _ = curve_fit(model, x, y)
a, b = params
print(f"拟合非线性方程:y = {a:.2f} * exp({b:.2f} * x)")# 使用模型预测
y_pred = model(x, a, b)# 绘制结果
plt.scatter(x, y, color="blue", label="实际数据点")
plt.plot(x, y_pred, color="green", label="拟合曲线")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.title("非线性最小二乘法拟合")
plt.show()
运行结果
  1. 输出拟合非线性方程:

    拟合非线性方程:y = 1.00 * exp(1.00 * x)

  2. 绘制图形:

    • 蓝色散点表示实际数据点。
    • 绿色曲线表示非线性模型的拟合结果。

应用领域

  1. 回归分析:在统计学中用于构建线性或非线性回归模型。
  2. 曲线拟合:在实验数据中寻找最佳拟合曲线。
  3. 信号处理:用于去噪和数据预测。
  4. 机器学习:作为线性模型训练的一部分,例如线性回归。

优点与局限性

优点
  • 方法简单且计算效率高。
  • 适用于多种模型,尤其是线性模型。
局限性
  • 对离群点敏感:极端值可能显著影响拟合效果。
  • 仅适用于误差为高斯分布的情形:当误差不服从正态分布时,结果可能不可靠。

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

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

相关文章

Flutter 多终端测试 自定义启动画面​​​​​​​ 更换小图标和应用名称

多终端测试 flutter devices flutter run -d emulator-5554 flutter run -d emulator-5556 自定义启动画面 之前: 进入assert 3x 生成 1x 2x dart run flutter_native_splash:create dart run flutter_native_splash:remove 现在(flutter_nativ…

springMVC实现文件上传

目录 一、创建项目 二、引入依赖 三、web.xml 四、编写上传文件的jsp页面 五、spring-mvc.xml 六、controller 七、运行 一、创建项目 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

Java内存与缓存

Java内存管理和缓存机制是构建高性能应用程序的关键要素。它们之间既有联系又有区别&#xff0c;理解这两者对于优化Java应用至关重要。 Java 内存模型 Java内存模型&#xff08;JMM&#xff09;定义了线程如何以及何时可以看到其他线程修改过的共享变量的值&#xff0c;并且规…

图片和短信验证码(头条项目-06)

1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构&#xff1a; {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…

云服务信息安全管理体系认证,守护云端安全

在数据驱动的时代&#xff0c;云计算已成为企业业务的超级引擎&#xff0c;推动着企业飞速发展。然而&#xff0c;随着云计算的广泛应用&#xff0c;信息安全问题也日益凸显&#xff0c;如同暗流涌动下的礁石&#xff0c;时刻威胁着企业的航行安全。这时&#xff0c;云服务信息…

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式&#xff08;如 WPS 文档或表格&#xff09;。然而&#xff0c;可以通过几种间接的方式实现这一目标&#xff0c;确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案&#xff1a; ​ 导出…

创建 WordPress 插件(第一部分):添加管理页面

WordPress 是互联网上最受欢迎的内容管理系统之一。它是用 PHP 创建的&#xff0c;可以处理从博客到商业网站的一切需求。事实上&#xff0c;我们的博客和网站都使用 WordPress。在本文中&#xff0c;我将向你展示如何创建一个 WordPress 插件&#xff0c;该插件会在管理员控制…

解锁企业数据管理统一身份认证难题,EasyMR助力企业敏捷提效

在数字经济迅猛发展的当下&#xff0c;企业数据量正以令人惊叹的速度持续增长。据IDC研究显示&#xff0c;至2025年&#xff0c;全球数据总量预计将超175 ZB。数据的爆发式增长对企业而言&#xff0c;既是机遇&#xff0c;更是巨大挑战。 如今&#xff0c;大数据已然成为企业决…

OPT: Open Pre-trained Transformer语言模型

摘要 大规模语言模型通常需要数十万计算日的训练时间&#xff0c;展现了在零样本和小样本学习中的显著能力。鉴于其计算成本之高&#xff0c;这些模型在没有大量资本投入的情况下难以复现。对于那些通过API提供的少数模型&#xff0c;研究者无法获取完整的模型权重&#xff0c…

Qt应用之MDI(多文档设计)

qt creator 版本6.8.0 MinGW 64bit 由此模块可以扩展成设计一个qt文本编辑器。 界面如下 部分功能展示如下 新建文件 打开文件 mdi模式、级联模式和平铺模式 界面和程序构建过程。 1.如图所需.cpp和.h文件 2.mainwindow.ui和tformdoc.ui界面布局如下 不懂什么是Action如何…

Linux第二课:LinuxC高级 学习记录day04

6、shell中的语句 6.3、结构性语句 6.3.1、if if…then…fi 1、结构 1&#xff09;基本结构 if 表达式 then 命令表 fi if [ 表达式 ] // 【】两侧有空格 then 命令表 fi 2&#xff09;分层结构 if 表达式 then 命令表1 else 命令表2 fi 3&#xff09;嵌套结构 if …

Linux C 使用ZBar库解析二维码和条形码

1. 编译zbar库 下载 zbar 库源码&#xff0c;这里需要注意下&#xff0c;如果识别的二维码中有中文的话&#xff0c;会出现乱码&#xff0c;一般二维码里中文为UTF-8编码&#xff0c;zbar会默认给你把UTF-8转换为ISO8859-1。有两种解决办法&#xff0c;一是自己再转换一下编码…

【北京迅为】iTOP-4412全能版使用手册-第七十九章 Qt网络编程

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

用python实战excel和word自动化

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 python实现excel和word自动化--批量处理 前言--需求快要期末了需要&#xff0c;提交一个年级的学生成绩数据&#xff0c;也就是几百份。当前我们收集了一份excel表格&#xf…

【R安装】R语言的详细安装及环境配置(2024年11月)

目录 R及Rstudio下载R下载Rstudio下载 R及Rstudio安装R安装Rtools 安装Rstudio安装 运行 RStudio通过RStudio配置使用特定的R版本 参考 R及Rstudio下载 R下载 R官网-The R Project for Statistical Computing 点击【download R】&#xff0c;进入下载界面&#xff1a; 选择…

Docker官网安装

1.官网 官方文档 https://www.docker.com/ Docker Hub官网 镜像 https://hub.docker.com/ 2.Docker 的三要素 1、镜像 2、容器 3、仓库 小总结 3.Docker 平台架构图 &#xff08;架构版本&#xff09; 4.安装Docker CentOS | Docker Docs 1.确定你是CentOS7及以上版本 …

寒假第一次牛客周赛 Round 76回顾

AC数&#xff1a;2&#xff08;A、C&#xff09; B 思路&#xff1a; 等价于求&#xff1a; 数量最多的字符 #include<stdio.h> int main() {int n,num;int a[26]{0};//用于存储字母 a 到 z 的出现次数。scanf("%d",&n);char s[n];scanf("%s",s)…

GARCH指导的神经网络在金融市场波动性预测中的应用

“GARCH-Informed Neural Networks for Volatility Prediction in Financial Markets” 论文地址&#xff1a;https://arxiv.org/pdf/2410.00288v1 摘要 波动性作为衡量风险的关键指标&#xff0c;广泛应用于金融投资的定价中。GARCH模型及其变体是用于股票波动性预测的传统工…

STM32-笔记43-低功耗

一、什么是低功耗&#xff1f; 低功耗‌是指通过优化设计和采用特定的技术手段&#xff0c;降低电子设备在运行过程中消耗的能量&#xff0c;从而延长电池寿命、提高性能和减少发热。低功耗设计主要从芯片设计和系统设计两个方面进行&#xff0c;旨在减少所有器件的功率损耗&am…

Docker 镜像制作原理 做一个自己的docker镜像

一.手动制作镜像 启动容器进入容器定制基于容器生成镜像 1.启动容器 启动容器之前我们首先要有一个镜像&#xff0c;这个镜像可以是从docker拉取&#xff0c;例如&#xff1a;现在pull一个ubuntu镜像到本机。 docker pull ubuntu:22.04 我们接下来可以基于这个容器进行容器…