最小二乘法

news2024/11/27 6:19:10

本文结合对ChatGTP的提问,用自己的理解讲一讲最小二乘法。

最小二乘法:

在这里插入图片描述
yi是实际值,yhat是理论值,就是拟合值,比方说一次函数做拟合,那就是在这个x点位置时的值。累加所有yi-yhat的平方,得到E并保证E最小,即最小二乘。
当然这个E的结果并不是固定的,不同的函数,不同的参数都会导致结果不同。
然后再将拟合函数带入原公式,假如用一次函数带入原始公式,那就对a求偏导即可。

代码实现

所以这其实是一个数学问题,代码实现也只是对偏导公式的一个数值解而已,不过结合ChatGTP,它还是给出了结合协方差和方差的拟合方案,用Unity实现一下:
在这里插入图片描述

using UnityEngine;

public class LeastSquaresMethod : MonoBehaviour
{
    public Vector2[] samplePoints;//采样点,需要在编辑器面板自己设置

    void OnDrawGizmos()
    {
        float xSum = 0f, ySum = 0f;
        for (int i = 0; i < samplePoints.Length; i++)
        {
            var item = samplePoints[i];

            xSum += item.x;
            ySum += item.y;
        }
        //x和y的平均值
        var xAve = xSum / samplePoints.Length;
        var yAve = ySum / samplePoints.Length;

        //sx是x轴的方差,sy是y轴的方差,方差反应了数据的离散程度
        //sxy是协方差,协方差大于零y与x正相关,小于零是负相关,等于零是无关
        float sx = 0f, sy = 0f, sxy = 0f;
        for (int i = 0; i < samplePoints.Length; i++)
        {
            sx += Mathf.Pow(samplePoints[i].x - xAve, 2);
            sy += Mathf.Pow(samplePoints[i].y - yAve, 2);
            sxy += (samplePoints[i].x - xAve) * (samplePoints[i].y - yAve);
        }

        Debug.Log("sxy:" + sxy);

        //此处套用公式
        var r = sxy / (Mathf.Sqrt(sx) * Mathf.Sqrt(sy));
        var a = r * (sy / sx);
        var b = yAve - a * xAve;

        //Unity绘制逻辑
        Vector3? lastPos = null;
        for (float i = 0f, step = 0.1f; i <= 1f; i += step)
        {
            var x = i / 1f;
            var y = a * x + b;

            var pos = new Vector3(x, y, 0f);
            if (lastPos.HasValue)
                Gizmos.DrawLine(lastPos.Value, pos);
            lastPos = pos;
        }

        for (int i = 0; i < samplePoints.Length; i++)
        {
            var item = samplePoints[i];

            Gizmos.DrawWireSphere(new Vector3(item.x, item.y, 0f), 0.03f);
        }
    }
}

最后在面板上填入一些采样点,可以得到最接近的拟合函数参数。

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

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

相关文章

chatgpt赋能Python-pycharm怎么下载python

PyCharm怎么下载Python&#xff1f; PyCharm是一款非常流行的Python开发IDE&#xff0c;Python是一门流行的编程语言。所以&#xff0c;对于那些想要使用PyCharm进行Python编程的人们来说&#xff0c;下载Python是一个关键的步骤。 什么是Python&#xff1f; Python是一门流…

消息中间件概念

什么是消息队列 消息队列是消息中间件的一种实现方式。 什么是消息中间件&#xff1f; 将消息中间件需要理解一下什么是消息和中间件&#xff1f; 消息 消息是指软件对象之间进行交互作用和通讯利用的一种方式。 中间件 百度百科的介绍&#xff1a; ​ 中间件&#xff08;Mid…

改进YOLOv5 | 在 C3 模块中添加【Triplet】【SpatialGroupEnhance】【NAM】【S2】注意力机制 | 附详细结构图

文章目录 1. Triplet 注意力模块1.1 原理1.2 C3_Triplet 代码2. SpatialGroupEnhance 注意力模块2.1 原理2.2 C3_SpatialGroupEnhance 代码3. NAM 注意力模块3.1 原理3.2 C3_NAM 代码4. S2 注意力模块4.1 原理4.2 C3_S2 代码5. 添加方式💡6. C3_Attention 结构图 &#x

chatgpt赋能Python-pycharm怎么编译python

PyCharm怎么编译Python&#xff1f; Python是当今最流行的编程语言之一&#xff0c;其简单易学、高效实用的特性使其受到了广大开发者的欢迎。PyCharm是一款专业的Python集成开发环境&#xff0c;它提供了许多有用的功能和工具&#xff0c;可以极大地提高开发效率。本文将介绍…

C++ 端点检测(8领域检测)

直线曲线端点检测 一、代码二、结果适用于直线、曲线等线的端点检测。 方法是:通过判断一个点周围8个点的像素的值来判断该点是否为端点,若周围8个点中有且只有一个点像素不为0,则认为该点是线段上的一个端点。 一、代码 #include <opencv2/opencv.hpp> using name…

lwip的路由表

在lwIP中&#xff0c;路由表被实现为一个以链表形式组织的数据结构&#xff0c;每个表项都包含一个目的网络地址和一个指向输出接口的指针。当需要将数据包发送到某个目的地址时&#xff0c;lwIP会遍历路由表&#xff0c;并找到最佳匹配的表项&#xff0c;然后将数据包发送到相…

《Linux0.11源码解读》理解(三) 执行setup

上一节的最后jmpi把cs:ip设置为0x9020:0000。于是CPU开始执行setup&#xff0c;它的作用是获取机器系统数据至内存&#xff0c;关中断并挪动system&#xff0c;为32位模式转换做准备。 加载系统信息至内存 同样是调用BISO中断&#xff0c;寄存器作为入参和返回值&#xff0c;…

javaweb系列-Vue.js

w2.1 Vue概述 一个完整的html页面包括了视图和数据&#xff0c;数据是通过请求 从后台获取的&#xff0c;那么意味着我们需要将后台获取到的数据呈现到页面上&#xff0c;很明显&#xff0c; 这就需要我们使用DOM操作。正因为这种开发流程&#xff0c;所以我们引入了一种叫做M…

NLP大模型微调答疑

什么情况用Bert模型&#xff0c;什么情况用LLaMA、ChatGLM类大模型&#xff0c;咋选&#xff1f; 答&#xff1a;Bert 的模型由多层双向的Transformer编码器组成&#xff0c;由12层组成&#xff0c;768隐藏单元&#xff0c;12个head&#xff0c;总参数量110M&#xff0c;约1.1…

虚拟机02 mysql安装和配置

第一步&#xff1a;在课程资料中&#xff0c;找到数据库安装文件&#xff0c;然后上传安装文件到Linux中。文件位置如图所示&#xff1a; 第二步&#xff1a;打开Linux&#xff0c;到工作目录中创建一个mysql目录&#xff0c;然后将安装文件上传到mysql中 第三步&#xff1a…

chatgpt赋能Python-pycharm与python关联

Pycharm与Python关联&#xff1a;让你的编程更加高效 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python编程的重要性。而作为一个Python开发者&#xff0c;我发现Pycharm的出现真正改变了Python编程的方式。本文将介绍Pycharm与Python的关联&#xff0c;并探讨这…

算法设计与分析:分支限界法

目录 第1关&#xff1a;0/1背包问题 任务描述&#xff1a; 相关知识&#xff1a; 分支限界法基本思想&#xff1a; 常见的分支限界法&#xff1a; 示例&#xff1a;0/1背包问题 对于0/1背包的优化&#xff1a; 题目描述&#xff1a; 编程要求&#xff1a; 测试说明&am…

chatgpt赋能Python-pycharm中怎么粘贴代码

PyCharm是Python编程领域中最受欢迎的集成开发环境之一。它是由JetBrains开发的一款跨平台IDE软件&#xff0c;旨在优化Python项目的开发过程。PyCharm拥有强大的代码编辑器、调试器、代码跟踪器和内置的版本控制工具&#xff0c;可以帮助开发人员编写高效、优质的Python代码。…

超级详细Git操作 之git log 命令的参数详解

git log命令主要用于查看Git版本演变历史&#xff08;也就是提交历史&#xff09;&#xff0c;同时根据追加的参数和选项不同&#xff0c;也会有不同的展示效果。 但默认git log命令显示出的x效果实在太丑&#xff0c;不好好打扮一下根本没法见人&#xff0c;打扮好了用alias命…

chatgpt赋能Python-pycharm怎么重新配置python环境

Pycharm重新配置Python环境方法概述 如果您是Python编程的专业人士或者是刚开始学习Python&#xff0c;您可能已经听说了Pycharm这个IDE。Pycharm不仅可以提高您Python编程的效率&#xff0c;而且也大大改善了整个开发过程。不过&#xff0c;如果您需要使用Pycharm重新配置Pyt…

深度学习用于医学预后-第二课第四周1-4节随堂作业

作业名&#xff1a;C2_W4_lecture.ipynb 作业地址&#xff1a; github --> bharathikannann/AI-for-Medicine-Specialization-deeplearning.ai --> AI for Medical Prognosis --> Week 4 One-hot encode categorical variables 首先我们来看一下哪些特征是分类特征…

Maven高级篇

分模块开发与设计 ssm_pojo拆分 新建模块拷贝原始项目中对应的相关内容到ssm_pojo模块中 实体类&#xff08;User&#xff09;配置文件&#xff08;无&#xff09; ssm_dao拆分 新建模块拷贝原始项目中对应的相关内容到ssm_dao模块中 数据层接口&#xff08;UserDao&#x…

spring学习笔记(2)

目录 RESTful Web 服务是干啥用的&#xff1f; 这个是什么意思&#xff1f;“OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.” 构建一个RESTful Web服务 GB有多大 点击…

IBM 创新方案+SNP数据转型助一汽大众实现数据平稳、高效迁移

近日&#xff0c;IBM 采用基于SNP Bluefield技术迁移的IBM Rapid Move创新数据迁移方案, 成功为一汽-大众实施了企业运营数据系统从 ECC 到 S/4 的升级项目。该项目系统切换耗时仅三天&#xff0c;不仅助客户高效、平稳迁移了系统数据&#xff0c;升级了数据底座&#xff0c;还…

第六讲:“声音”写具体

爸爸又打呼了!“呼噜一呼噜一像一股巨浪腾空而起&#xff0c;以每秒八十米的速度向上冲刺&#xff0c;力图掀开天花板&#xff0c;掀翻整座住宅楼;“呼噜一一呼噜一-”&#xff0c;像一台轰鸣的坦克在穿行&#xff0c;床垫在抖动&#xff0c;吊灯在摇晃&#xff0c;墙灰在簌籁(…