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

news2025/1/16 23:31:37

最小二乘法(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_mean
    
    print(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_fit

plt.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.coloradmin.cn/o/2277751.html

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

相关文章

我的年度总结

这一年的人生起伏:从曙光到低谷再到新的曙光 其实本来没打算做年度总结的,无聊打开了帅帅的视频,结合自己最近经历的,打算简单聊下。因为原本打算做的内容会是一篇比较丧、低能量者的呻吟。 实习生与创业公司的零到一 第一段工…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…

Mysql--运维篇--主从复制和集群(主从复制I/O线程,SQL线程,二进制日志,中继日志,集群NDB)

一、主从复制 MySQL的主从复制&#xff08;Master-Slave Replication&#xff09;是一种数据冗余和高可用性的解决方案&#xff0c;它通过将一个或多个从服务器&#xff08;Slave&#xff09;与主服务器&#xff08;Master&#xff09;同步来实现。主从复制的基本原理是&#…

实战threeJS数字孪生开源 数字工厂

threeJS数字孪生 数字工厂 设备定位 基于three.js的数字工厂开源项目介绍 一、项目概述 本项目是一款基于three.js的数字工厂项目&#xff0c;旨在通过3D可视化技术&#xff0c;为工业制造领域提供一个直观、高效、智能的生产监控与管理平台。该项目结合了现代前端技术栈&…

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法&#xff0c;用于处理…

计算机网络 (44)电子邮件

一、概述 电子邮件&#xff08;Electronic Mail&#xff0c;简称E-mail&#xff09;是因特网上最早流行的应用之一&#xff0c;并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网&#xff0c;实现了信息的快速、便捷传递。与传统的邮政系统相比&#…

向量数据库Milvus详解

向量数据库Milvus详解 0. 什么是向量数据库? 在现实世界中,并非所有数据都可以整齐地放到行和列中。在处理图像、视频和自然语言等复杂的非结构化数据时尤其如此。这就是向量数据库的用武之地。 向量数据库是一种以高维向量的形式来存储数据的数据库,这些向量本质上是表示…

通信与网络安全管理之ISO七层模型与TCP/IP模型

一.ISO参考模型 OSI七层模型一般指开放系统互连参考模型 (Open System Interconnect 简称OSI&#xff09;是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型&#xff0c;为开放式互连信息系统提供了一种功能结构的框架。 它从低到高分别是…

Redis--21--大Key问题解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言Redis--20--大Key问题解析 一、如何发现Redis大Key1. 使用Redis命令行工具**MEMORY USAGE****RANDOMKEY****DEBUG OBJECT****SCAN命令****redis-cli 工具&#…

微信小程序订阅消息提醒-云函数

微信小程序消息订阅分2种&#xff1a; 1.一次性订阅&#xff1a;用户订阅一次就可以推送一次&#xff0c;如果需要多次提醒需要多次订阅。 2.长期订阅&#xff1a;只有公共服务领域&#xff0c;如政务、医疗、交通、金融和教育等。‌在用户订阅后&#xff0c;在很长一段时间内…

Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示&#xff0c;你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍&#xff0c;以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装&#xff08;不需要编译安装…

了解Python中的SciPy库

么是 SciPy&#xff1f; SciPy&#xff08;发音为“Sigh Pie”&#xff09;是 Scientific Python 的首字母缩写词&#xff0c;它是 Python 的开源库&#xff0c;用于科学和技术计算。它是 Python 编程语言中称为 Numpy 的基本数组处理库的扩展&#xff0c;旨在支持高级科学和工…

51单片机入门基础

目录 一、基础知识储备 &#xff08;一&#xff09;了解51单片机的基本概念 &#xff08;二&#xff09;掌握数字电路基础 &#xff08;三&#xff09;学习C语言编程基础 二、开发环境搭建 &#xff08;一&#xff09;硬件准备 &#xff08;二&#xff09;软件准备 三、…

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…

【Uniapp-Vue3】使用defineExpose暴露子组件的属性及方法

如果我们想要让父组件访问到子组件中的变量和方法&#xff0c;就需要使用defineExpose暴露&#xff1a; defineExpose({ 变量 }) 子组件配置 父组件配置 父组件要通过onMounted获取到子组件的DOM 传递多个属性和方法 子组件 父组件

qml XmlListModel详解

1、概述 XmlListModel是QtQuick用于从XML数据创建只读模型的组件。它可以作为各种view元素的数据源&#xff0c;比如ListView、GridView、PathView等&#xff1b;也可以作为其他和model交互的元素的数据源。通过XmlRole定义角色&#xff0c;如name、age和height&#xff0c;并…

登录系统网址作业

目录 主页代码 主页​编辑 效果1 登录页面代码 登录页面 效果2 注册页面代码 注册页面 效果3 主页代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content&qu…

生产管理看板助力节能科技公司实现数据自动化管理

在节能科技公司的生产过程中&#xff0c;数据管理的自动化是提高生产效率和产品质量的关键。然而&#xff0c;许多公司在数据记录、展示、对比和存档方面仍面临诸多痛点&#xff0c;如产品检测数据无法自动记录、缺乏直观的产线状态展示、检测数据对比繁琐耗时&#xff0c;以及…

论文阅读:Searching for Fast Demosaicking Algorithms

今天介绍一篇有关去马赛克的工作&#xff0c;去马赛克是 ISP 流程里面非常重要的一个模块&#xff0c;可以说是将多姿多彩的大千世界进行色彩还原的重要一步。这篇工作探索的是如何从各种各样的去马赛克算法中&#xff0c;选择最佳的一种。 Abstract 本文提出了一种方法&…

nginx 修改内置 404 页面、点击劫持攻击。

1、在部署前端项目的目录下增加 404.html 页面&#xff1a;/opt/web/404.html。 2、在 nginx 配置中增加 404 配置&#xff1a; root /opt/web; # 设置根目录的配置error_page 404 404.html; location /404.html {root /opt/web;# 指定 404 页面所在的根目录internal;# 确保…