python:最小二乘法拟合原理及代码实现

news2024/11/17 11:42:28

这里写目录标题

  • 原理
  • 代码实现

原理

最小二乘法适用于对处理的一堆数据,不必精确的经过每一点,而是根据图像到每个数据点的距离和最小确定函数。需要注意的是,最小二乘是对全局进行拟合优化,对噪声比较敏感,所以如果有噪声比较大的观测值会影响拟合结果,此时建议用RANSAC算法拟合。

最小二乘法逼近的最简单的例子是根据一组观测值对(x1,y1),(x2,y2)…(xn,yn)来拟合一条直线。
在这里插入图片描述
对于 y = a 0 + a 1 x + e y=a_{0} + a_{1}x + e y=a0+a1x+e,在一组观测数据中拟合最好的模型,即使得残差 e e e的平方和最小。分别对 a 0 、 a 1 a_{0}、a_{1} a0a1求偏导,可得:
∑ i = 1 n a 0 + ∑ i = 1 n x i a 1 = ∑ i = 1 n y i ∑ i = 1 n x i a 0 + ∑ i = 1 n x i 2 a 1 = ∑ i = 1 n x i y i \begin {matrix} \displaystyle\sum_{i=1}^na_{0} + \displaystyle\sum_{i=1}^nx_{i}a_{1} = \displaystyle\sum_{i=1}^ny_{i} \\ \displaystyle\sum_{i=1}^nx_{i}a_{0} + \displaystyle\sum_{i=1}^nx_{i}^2a_{1} = \displaystyle\sum_{i=1}^nx_{i}y_{i} \end {matrix} i=1na0+i=1nxia1=i=1nyii=1nxia0+i=1nxi2a1=i=1nxiyi
则:
a 1 = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 a_{1} = \cfrac {n\sum_{i=1}^nx_{i}y_{i} - \sum_{i=1}^n x_{i}\sum_{i=1}^n y_{i}}{n \sum_{i=1}^n x_{i}^2 - (\sum_{i=1}^n x_{i})^2}\\ a1=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nxii=1nyi
a 0 = y ˉ − a 1 x ˉ a_{0} = \text{\={y}} - a_{1}\text{\={x}} a0=yˉa1xˉ
对n次多项式同样适用。

代码实现

def leastsq_fit(points:np.ndarray):
    points_size = len(points)
    points_sum = np.sum(points, axis=0)
    sum_xy = np.sum(points[:, 0] * points[:, 1], axis=0)
    sum_x = points_sum[0]
    sum_y = points_sum[1]
    sum_sqare_x = np.sum(points ** 2, axis=0)[0]
    average_x = sum_x / points_size
    average_y = sum_y / points_size
    k = (points_size*sum_xy - sum_x*sum_y)/(points_size*sum_sqare_x - sum_x*sum_x)
    b = average_y - average_x*k
    best_model = np.zeros((2, 1), dtype=np.float32)
    best_model[0, 0] = b
    best_model[1, 0] = k

    return best_model

矩阵形式参考我另外的博客链接1,链接2

def leastsq_mutifunc(x, y, m):
    """
    多项式最小二乘法实现, 矩阵形式
    :param x:输入
    :param y:目标输出
    :param m:多项式阶数
    :return:多项式系数
    """
    x = np.array(x)
    y = np.array(y)

    assert m <= x.shape[0], f"the number of m({m}) need less than x's size({x.shape[0]})"
    assert x.shape[0] == y.shape[0], f"the size of x({x.shape[0]}) must equal to y's size({y.shape[0]}"
    x_mat = np.zeros((x.shape[0], m+1))
    for i in range(x.shape[0]):
        x_mat_h = np.zeros((1, m+1))
        for j in range(m+1):
            x_mat_h[0][j] = x[i] ** (m-j)
        x_mat[i] = x_mat_h
    theta = np.dot(np.dot(np.linalg.inv(np.dot(x_mat.T, x_mat)), x_mat.T), y.T)
    return theta

参考链接1
参考链接2

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

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

相关文章

知识点7--Docker的容器命令

本篇为大家介绍Docker的容器命令&#xff0c;也顺带着让大家明白Docker和vmware都属于虚拟化技术下的软件&#xff0c;但是他们的不同之处不止在于运行的系统不同&#xff0c;他们的运行逻辑也不同&#xff0c;VMware是虚拟化完整的系统&#xff0c;而docker是隔离一个进程&…

03 - 调试环境的搭建(Bochs)(实验未完)

---- 整理自狄泰软件唐佐林老师课程 1. Bochs&#xff08;另一款优秀的虚拟机软件&#xff09; 专业模拟x86架构的虚拟机 开源且高度可移植&#xff0c;由C编写完成 支持操作系统开发过程中的断点调试 通过简单配置就能运行绝大多数主流的操作系统 2. Bochs的安装与配置 下载…

数字化升级里,RPA的下一步正在走向哪?

如果说&#xff0c;API这种能力在2021年并未成为“刚需”&#xff0c;那么在2022年其已经一跃成为RPA进入企业真正场景的“必需品”。 作者|斗斗 编辑|皮爷 出品|产业家 今年八月&#xff0c;调查机构Gartner发布了2022全球RPA魔力象限。 数据显示&#xff0c;2021年&a…

空间直接坐标系(XYZ)转经纬度(BLH)

本章首先介绍空间直角坐标系与大地坐标系&#xff0c;然后列出XYZ转换BLH的公式&#xff0c;最后基于C语言完成该部分代码设计。 参考书籍&#xff1a; 董大男&#xff0c;陈俊平&#xff0c;王解先等&#xff0c;GNSS高精度定位原理&#xff0c;科学出版社 黄丁发&#xff0c;…

图扑软件荣获第七届“创客中国”中小企业创新创业大赛优胜奖

2022 年 11 月 17 日&#xff0c;由工业和信息化部、财政部共同主办的第七届“创客中国”中小企业创新创业大赛全国总决赛在浙江杭州落下帷幕。 本次《第七届“创客中国”中小企业创新创业大赛》举办目的&#xff0c;意在加大优质中小企业梯度培育力度&#xff0c;进一步提升中…

高新技术企业如何规划

如何提高申报高企的成功率&#xff0c;应该是很多企业关心的一个问题。 2022年高新技术企业申报已经结束&#xff0c;今年第三批申报的企业结果也将公示&#xff0c;有客户会问&#xff0c;历年来你们申报高企通过率这么高&#xff0c;是怎么做到的&#xff1f; 那么现在呢&a…

《痞子衡嵌入式半月刊》 第 66 期

痞子衡嵌入式半月刊&#xff1a; 第 66 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目&#xff08;GitHub: JayHeng/pzh-mcu-bi-weekly&#xff09;&#xff0c;欢…

Spring 框架下如何调用kafka

1、Spring 项目代码结构如下&#xff1a; 2、数据库资源配置文件如下&#xff1a; #sql配置文件 spring.datasource.driver-class-namecom.microsoft.sqlserver.jdbc.SQLServerDriver #.19為測試地址&#xff0c;.13為正式地址 spring.datasource.urljdbc:sqlserver://172.12.…

[ 红队知识库 ] 常见防火墙(WAF)拦截页面

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu交叉编译Arm Linux环境下的身份证读卡器so库操作步骤

1、配置环境变量 ①将gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar解压至/home/eastcoms/ sudo或者root运行命令 &#xff1a;sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /home/eastcoms .tar用 -xvf .gz用 -zxvf .bz2用 -jxvf …

easypoi导入案例

文章目录easypoi导入案例一、依赖二、导出模板1、excel模板实体类(同下)2、具体实现类3、easypoi工具类中的方法4、自定义样式类三、导入校验1、excel模板实体类2、具体实现类3、自定义信号导入校验类easypoi导入案例 一、依赖 <dependency><groupId>cn.afterturn…

第7 部分 HDLC 和PPP

路由器经常用于构建广域网&#xff0c;广域网链路的封装和以太网上的封装有着非常大的差别。常见的广域网封装有HDLC&#xff0c;PPP 和Frame-relay 等&#xff0c;本次介绍HDLC 和PPP。相对而言&#xff0c;PPP 比HDLC 有较多的功能。 7.1 HDLC 和PPP 简介 7.1.1 HDLC 介绍 H…

批处理及有状态等应用类型在 K8S 上应该如何配置?

众所周知, Kubernetes(K8S)更适合运行无状态应用, 但是除了无状态应用. 我们还会有很多其他应用类型, 如: 有状态应用, 批处理, 监控代理(每台主机上都得跑), 更复杂的应用(如:hadoop 生态...). 那么这些应用可以在 K8S 上运行么? 如何配置? 其实, K8S 针对这些都有对应的不…

操作系统:存储器管理 练习题(带有详细答案解析)

文章目录1.存储器的层次结构2.程序的装入和链接2.1.程序的装入2.2.程序的链接3.连续分配存储管理方式3.1.单一连续分配3.2.固定分区分配3.3.动态分区分配3.4.基于顺序搜索的动态分区分配算法3.5.基于索引搜索的动态分区分配算法3.6.动态可重定位分区分配4.对换4.1.多道程序环境…

SBT 树原理和实战

一 基本概念 SBT&#xff08;Size Balanced Tree&#xff0c;节点大小平衡树&#xff09;是一种自平衡二叉查找树&#xff0c;通过子树的大小来保持平衡。与红黑树、AVL 树等自平衡二叉查找树相比&#xff0c;SBT更易于实现。SBT 可以在 O (logn) 时间内完成所有二叉搜索树的相…

【考研】操作系统复习冲刺(2023年408)

前言 本文内容主要源自于王道讲解的学习笔记总结。梳理《操作系统》考点&#xff08;以理论为重点&#xff09;&#xff0c;并对重点内容划下横线和加粗标注&#xff0c;方便考研复习。 可搭配以下链接一起学习&#xff1a; 【考研复习】《操作系统原理》孟庆昌等编著课后习…

数字IC手撕代码-同步FIFO

前言&#xff1a; 本专栏旨在记录高频笔面试手撕代码题&#xff0c;以备数字前端秋招&#xff0c;本专栏所有文章提供原理分析、代码及波形&#xff0c;所有代码均经过本人验证。 目录如下&#xff1a; 1.数字IC手撕代码-分频器&#xff08;任意偶数分频&#xff09; 2.数字…

磁环选型攻略及EMC整改技巧

磁环选型攻略及EMC整改技巧 今天跟大家分享一下磁环选型及应用相关的知识&#xff0c;希望对你有帮助。 本文将从以下四个方面对磁环进行阐述。 一、磁环的应用场景 首先我们来看几张图片 图1 显示屏VGA线 图2 适配器连接线 图3 USB通信线 这三根线都是我们生活中常见的供电…

简单个人网页设计作业 静态HTML个人博客主页——HTML+CSS+JavaScript 明星鹿晗(7页)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

ping回显间隔长或第一个包很久才显示是怎么回事?

问题现象 在ping某些域名的时候&#xff0c;第一个回显十几秒才出现&#xff0c;但时延time正常&#xff0c;第二个包开始回显频率正常且最终统计结果为不丢包&#xff1b;或是每一个回显均间隔数秒才显示&#xff0c;但时延time又都是正常的&#xff0c;且统计结果为不丢包。…