数学建模学习笔记(四)——拟合算法

文章目录

    • 拟合算法简介
    • 一个线性规划的例子
    • 最小二乘法
    • 求解最小二乘法
    • 拟合检验
    • 总结

拟合算法简介

  1. 与插值算法不同,拟合算法的目的是得到一条确定的曲线;而插值是根据已有的数据来获得一系列新的“靠谱”的数据。
  2. 插值要求曲线必须全部经过样本数据点,而拟合所得的结果曲线不一定要经过每一个样本数据点,只要能够通过误差检验即可

一个线性规划的例子

一个例子
显然,由图中的数据可以得到,可以设置该拟合曲线为 y=kx+by = kx + by=kx+b,要估计 kkk 和 bbb 的值,可以使用高中所学知识——最小二乘法。

最小二乘法

设样本点数据为 (xi,yi)(x_i, y_i)(xi​,yi​),i=1,2,⋯,ni = 1, 2, \cdots, ni=1,2,⋯,n,那么最小二乘法有如下两种定义:

  1. 第一种定义:yi^=kxi+b\hat{y_i} = kx_i + byi​^​=kxi​+b
    其中:ki^,bi^=argk,bmin(∑i=1n∣yi−yi^∣)\hat{k_i}, \hat{b_i} = arg_{k, b} min(\sum_{i=1}^{n}|y_i-\hat{y_i}|)ki​^​,bi​^​=argk,b​min(i=1∑n​∣yi​−yi​^​∣)表示表达式的参数为kkk和bbb,而 k^\hat{k}k^ 和 b^\hat{b}b^ 能够使得表达式取得最小值。
  2. 第二种定义:yi^=kxi+b\hat{y_i} = kx_i + byi​^​=kxi​+b
    其中:k^,b^=argk,bmin(∑i=1n(yi−yi^)2)\hat{k}, \hat{b} = arg_{k, b}min(\sum_{i = 1}^{n}(y_i - \hat{y_i})^2)k^,b^=argk,b​min(i=1∑n​(yi​−yi​^​)2)表达的意义与第一种定义相同,只是表达式不同而已。

在平常的应用中,我们常常使用第二种定义。原因是第一种定义中含有绝对值,函数图像有拐点,不易求导。由此可以引申出以下结论:
∙\bullet∙ 不用奇数次原因
使用奇数次会有负数出现,那么误差就会奇偶相抵
∙\bullet∙ 不用偶数次原因
像4次这样的次数太高,结果易受极端数据(比如当自变量很大时)的影响。

求解最小二乘法

令L=∑i=1n(yi−kxi−b)2L = \sum_{i = 1}^{n}(y_i - kx_i - b)^2L=∑i=1n​(yi​−kxi​−b)2,现在要寻找能够使 LLL 最小的 kkk 和 bbb 的值:{∂L∂k=−2∑i=1nxi(yi−kxi−b)=0∂L∂b=−2∑i=1n(yi−kxi−b)=0\left\{ \begin{aligned} & \frac{\partial L}{\partial k} = -2\sum_{i = 1}^{n}x_i(y_i - kx_i - b) = 0 \\ & \frac{\partial L}{\partial b} = -2\sum_{i = 1}^{n}(y_i - kx_i - b) = 0 \end{aligned} \right.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​∂k∂L​=−2i=1∑n​xi​(yi​−kxi​−b)=0∂b∂L​=−2i=1∑n​(yi​−kxi​−b)=0​ ⇒{∑i=1nxiyi=k∑i=1nxi2+b∑i=1nxi∑i=1nyi=k∑i=1nxi+bn\Rightarrow \left\{ \begin{aligned} & \sum_{i = 1}^{n}x_iy_i = k\sum_{i = 1}^{n}x_i^2 + b\sum_{i = 1}^{n}x_i \\ & \sum_{i = 1}^{n}y_i = k\sum_{i = 1}^{n}x_i + bn \end{aligned} \right.⇒⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​i=1∑n​xi​yi​=ki=1∑n​xi2​+bi=1∑n​xi​i=1∑n​yi​=ki=1∑n​xi​+bn​ ⇒{n∑i=1nxiyi=kn∑i=1nxi2+bn∑i=1nxI∑i=1nyi∑i=1nxi=k∑i=1nxi∑i=1nxi+bn∑i=1nxi\Rightarrow \left\{ \begin{aligned} & n\sum_{i = 1}^{n}x_iy_i = kn\sum_{i = 1}^{n}x_i^2 + bn\sum_{i = 1}^{n}x_I \\ & \sum_{i = 1}^{n}y_i\sum_{i = 1}^{n}x_i = k\sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i + bn\sum_{i = 1}^{n}x_i \end{aligned} \right.⇒⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​ni=1∑n​xi​yi​=kni=1∑n​xi2​+bni=1∑n​xI​i=1∑n​yi​i=1∑n​xi​=ki=1∑n​xi​i=1∑n​xi​+bni=1∑n​xi​​
因此:n∑i=1nxiyi−∑i=1nyi∑i=1nxi=kn∑i=1nxi2−k∑i=1nxi∑i=1nxin\sum_{i = 1}^{n}x_iy_i - \sum_{i = 1}^{n}y_i\sum_{i = 1}^{n}x_i = kn\sum_{i = 1}^{n}x_i^2 - k\sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_ini=1∑n​xi​yi​−i=1∑n​yi​i=1∑n​xi​=kni=1∑n​xi2​−ki=1∑n​xi​i=1∑n​xi​ ⇒k^=n∑i=1nxiyi−∑i=1nyi∑i=1nxin∑i=1nxi2−∑i=1nxi∑i=1nxi\Rightarrow \hat{k} = \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\sum_{i = 1}^{n}x_i}⇒k^=n∑i=1n​xi2​−∑i=1n​xi​∑i=1n​xi​n∑i=1n​xi​yi​−∑i=1n​yi​∑i=1n​xi​​ ⇒b^=∑i=1nxi2∑i=1nyi−∑i=1nxi∑i=1nxiyin∑i=1xxi2−∑i=1nxi∑i=1nxi\Rightarrow \hat{b} = \frac{\sum_{i = 1}^{n}x_i^2\sum_{i = 1}^{n}y_i - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_iy_i}{n\sum_{i = 1}^{x}x_i^2 - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i}⇒b^=n∑i=1x​xi2​−∑i=1n​xi​∑i=1n​xi​∑i=1n​xi2​∑i=1n​yi​−∑i=1n​xi​∑i=1n​xi​yi​​

拟合检验

在函数时线性函数(注意:这里的线性函数是指参数是线性的,而不是自变量是线性的,例如:y=ax2+by=ax^2 + by=ax2+b同样也是线性函数)时,可以使用拟合优度(可决系数)R2R^2R2 来判断拟合好坏

  1. 拟合优度的定义
    ∙\bullet∙ 总体平方和 SST=∑i=1n(yi−yˉ)2SST = \sum_{i = 1}^{n}(y_i - \bar{y})^2SST=i=1∑n​(yi​−yˉ​)2
    ∙\bullet∙ 误差平方和 SSE=∑i=1n(yi−yi^)2SSE = \sum_{i = 1}^{n}(y_i - \hat{y_i})^2SSE=i=1∑n​(yi​−yi​^​)2
    ∙\bullet∙ 回归平方和 SSR=∑i=1n(yi^−yˉ)2SSR = \sum_{i = 1}^{n}(\hat{y_i} - \bar{y})^2SSR=i=1∑n​(yi​^​−yˉ​)2其中,SST=SSE+SSRSST = SSE + SSRSST=SSE+SSR
    此时可以定义拟合优度 R2=SSRSST=SST−SSESSR=1−SSESSTR^2 = \frac{SSR}{SST} = \frac{SST - SSE}{SSR} = 1 - \frac{SSE}{SST}R2=SSTSSR​=SSRSST−SSE​=1−SSTSSE​,R2R^2R2 越接近于0,说明误差越小,拟合度越好 。
    下面证明 SST=SSE+SSRSST = SSE + SSRSST=SSE+SSR:∑i=1n(yi−yˉ)2=∑i=1n(yi−yi^+yi^−yˉ)2=∑i=1n(yi−yi^)2+∑i=1n(yi^−yˉ)2+2∑i=1n(yi−yi^)(yi^−yˉ)\sum_{i = 1}^{n}(y_i - \bar{y})^2 = \sum_{i = 1}^{n}(y_i - \hat{y_i} + \hat{y_i} - \bar{y})^2 \\= \sum_{i = 1}^{n}(y_i - \hat{y_i})^2 + \sum_{i = 1}^{n}(\hat{y_i} - \bar{y})^2 + 2\sum_{i = 1}^{n}(y_i - \hat{y_i})(\hat{y_i} - \bar{y})i=1∑n​(yi​−yˉ​)2=i=1∑n​(yi​−yi​^​+yi​^​−yˉ​)2=i=1∑n​(yi​−yi​^​)2+i=1∑n​(yi​^​−yˉ​)2+2i=1∑n​(yi​−yi​^​)(yi​^​−yˉ​)因此,只需证明:∑i=1n(yi−yi^)(yi^−yˉ)=0\sum_{i = 1}^{n}(y_i - \hat{y_i})(\hat{y_i} - \bar{y}) = 0i=1∑n​(yi​−yi​^​)(yi​^​−yˉ​)=0由一阶导数条件:{∂L∂k=−2∑i=1nxi(yi−kxi−b)=0∂L∂b=−2∑i=1n(yi−kxi−b)=0\left\{ \begin{aligned} & \frac{\partial L}{\partial k} = -2\sum_{i = 1}^{n}x_i(y_i - kx_i - b) = 0 \\ & \frac{\partial L}{\partial b} = -2\sum_{i = 1}^{n}(y_i - kx_i - b) = 0\end{aligned} \right.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​∂k∂L​=−2i=1∑n​xi​(yi​−kxi​−b)=0∂b∂L​=−2i=1∑n​(yi​−kxi​−b)=0​ ⇒{∑i=1nxi(yi−yi^)=0∑i=1n(yi−yi^)=0\Rightarrow \left\{ \begin{aligned} & \sum_{i = 1}^{n}x_i(y_i - \hat{y_i}) = 0 \\ & \sum_{i = 1}^{n}(y_i - \hat{y_i}) = 0 \end{aligned} \right.⇒⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​i=1∑n​xi​(yi​−yi​^​)=0i=1∑n​(yi​−yi​^​)=0​因此,∑i=1n(yi−yi^)(yi^−yˉ)=∑i=1nyi^(yi−yi^)−yˉ∑i=1n(yi−yi^)=∑i=1n(kxi+b)(yi−yi^)=0\begin{aligned} & \sum_{i = 1}^{n}(y_i - \hat{y_i})(\hat{y_i} - \bar{y}) \\ = & \sum_{i = 1}^{n}\hat{y_i}(y_i - \hat{y_i}) - \bar{y}\sum_{i = 1}^{n}(y_i - \hat{y_i}) \\ = & \sum_{i = 1}^{n}(kx_i + b)(y_i - \hat{y_i}) = 0 \end{aligned}==​i=1∑n​(yi​−yi​^​)(yi​^​−yˉ​)i=1∑n​yi​^​(yi​−yi​^​)−yˉ​i=1∑n​(yi​−yi​^​)i=1∑n​(kxi​+b)(yi​−yi​^​)=0​(参数)线性函数可以使用 R2R^2R2 来判断拟合的好坏,其他非线性的函数直接看 SSESSESSE 的大小即可。

总结

像拟合这类型的问题,最简便的方法时使用 MatlabMatlabMatlab 中的拟合工具箱来拟合。里面有许多内置的拟合函数类型,且能计算 R2R^2R2 或者 SSESSESSE,通过输入参数,确定拟合类型即可获得拟合函数。

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

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

相关文章

C语言运算符的优先级及结合性

C语言运算符的优先级我们结合实例了解会更加简单易懂。 示例程序 #include <stdio.h> int main(){int a 16, b 4, c 2;int d a b * c;int e a / b * c;printf( "d%d, e%d\n", d, e);return 0; }运行结果&#xff1a; d24, e81 . 对于表达式a b * c&a…

没有bug队——加贝——Python 55,56

55.题目&#xff1a;学习使用按位取反~。 说明&#xff1a; 二进制数在内存中以补码的形式存储。 按位取反&#xff1a;二进制每一位取反&#xff0c;0 变 1&#xff0c;1 变 0。 最高位为符号位&#xff0c;正数的符号位为 0&#xff0c;负数为 1。 对正数来说&#xff0…

数学建模学习笔记(五)——相关系数以及假设检验

文章目录皮尔逊相关系数假设检验下面来看一个例子斯皮尔曼(spearman)相关系数注意皮尔逊相关系数 总体皮尔逊&#xff08;Pearson&#xff09;相关系数 如果有 A:{A1,A2,⋯,An}A:\{A_1, A_2, \cdots, A_n\}A:{A1​,A2​,⋯,An​} 和 Y:{Y1,Y2,⋯,Yn}Y:\{Y_1, Y_2, \cdots, Y_n\…

没有bug队——加贝——Python 57,58

相关 tkinter 的介绍&#xff1a;Python 55&#xff0c;56 目录 57.题目&#xff1a;画图&#xff0c;学用line画直线。 58.题目&#xff1a;画图&#xff0c;学用rectangle画方形。   57.题目&#xff1a;画图&#xff0c;学用line画直线。 #57 from tkinter import *c…

C语言高级输出及进阶

在C语言中&#xff0c;有三个函数可以用来在显示器上输出数据&#xff0c;它们分别是&#xff1a; puts()&#xff1a;只能输出字符串&#xff0c;并且输出结束后会自动换行。putchar()&#xff1a;只能输出单个字符。printf()&#xff1a;可以输出各种类型的数据。printf() 是…

数学建模学习笔记(六)——多元线性回归分析

文章目录一、综述二、常见的回归分析三、对于相关性的理解四、一元线性回归模型五、对于回归系数的解释六、内生性七、四类线性模型回归系数的解释八、对于定性变量的处理——虚拟变量XXX九、下面来看一个实例十、扰动项需要满足的条件十一、异方差十二、多重共线性十三、逐步回…

没有bug队——加贝——Python 59,60

相关 tkinter 的介绍&#xff1a;Python 55&#xff0c;56 目录 59.题目&#xff1a;画图&#xff0c;综合例子。  60.题目&#xff1a;计算字符串长度。  len&#xff08;&#xff09;函数用法 59.题目&#xff1a;画图&#xff0c;综合例子。   程序分析&#xff…

爬虫必备反爬技能:使用动态ip

目录 一、为什么要使用动态代理ip? 二、如何申请动态代理ip&#xff1f; 三、如何使用动态ip&#xff1f; 一、为什么要使用动态代理ip? 使用它的好处在哪里呢&#xff1f; 保护你的网络免受外部攻击屏蔽你的IP地址限制不必要的内容更好的帮助你抓取网络数据绕过目标网站…

数学建模学习笔记(七)——图论最短路问题

文章目录一、综述二、图论最短路问题三、几个简单的作图方法四、Dijkstra&#xff08;迪杰斯特拉&#xff09;算法五、Bellman-Ford算法六、总结一、综述 本文主要根据图论的基本概念&#xff0c;介绍图论中常见的建模问题——最短路问题。同时&#xff0c;介绍了解决图论最短…

pycharm和pythonIDE安装详解

目录 一、pycharm下载安装 二、python下载安装 ​三、pycharm上配置python 我们可能显示的库不大一样&#xff0c;因为我这大都事先安装过了&#xff0c;就没有删​打印成功&#xff1a;标志配置完成​四、配置镜像源让你下载嗖嗖的快 4.1&#xff09;pycharm内部配置 4.2…

数学建模学习笔记(八)——分类模型

文章目录一、分类模型综述二、逻辑回归三、两点分布&#xff08;伯努利分布&#xff09;四、连接函数的取法五、Logistic回归模型六、在SPSS中进行二元Logistic回归七、预测结果较差的解决八、Fisher线性判别分析九、多分类问题十、总结一、分类模型综述 通过样本数据中的分类…

python基础入门(1)

目录 一、python入门 二、python缩进 三、Python注释 1&#xff09;单行注释 2&#xff09;多行注释 四、Python 变量 1&#xff09;变量定义理解 2&#xff09; 变量名命名 3&#xff09; 分配多个值 4&#xff09;输出变量 5&#xff09;全局变量与局部变量&#…

数学建模学习笔记(九)——聚类模型

文章目录一、聚类综述二、主要用到的聚类算法三、K-means聚类算法四、K-means算法五、对于K-means算法和K-means算法的讨论六、系统&#xff08;层次&#xff09;聚类算法七、DBSCAN算法八、总结一、聚类综述 聚类的主要目的就是将样本划分为由类似的对象组成的多个类的过程。…

python基础入门(2)

目录 一、Python数据类型 1&#xff09;置数据类型 2&#xff09;获取数据类型 3&#xff09;设置数据类型 4&#xff09;设置特定数据类型 6&#xff09;练习题 二、python数字- 1&#xff09;整数 2&#xff09;浮点数 3&#xff09;虚数 4&#xff09;类型转换 …

C语言scanf:获取输入的内容

获取外部输入数据内容 在C语言中&#xff0c;有多个函数可以从键盘获得用户输入&#xff1a; scanf()&#xff1a;和 printf() 类似&#xff0c;scanf() 可以输入多种类型的数据。getchar()、getche()、getch()&#xff1a;这三个函数都用于输入单个字符。gets()&#xff1a;获…

数学建模学习笔记(十)——时间序列模型

文章目录一、时间序列综述二、时间序列数据以及基本概念三、时间序列分解四、指数平滑模型五、一元时间序列分析的模型六、AR&#xff08;p&#xff09;模型七、MA&#xff08;q&#xff09;模型八、ARMA&#xff08;p, q&#xff09;模型九、模型选择&#xff1a;AIC 和 BIC 准…

python基础入门(3)之字符串

目录 一、Python字符串 1.字符串基本使用 1&#xff09;字符串理解 2&#xff09;将字符串分配给变量 3&#xff09;多行字符串 4&#xff09;字符串是数组 5)遍历字符串 6)字符串长度 7)检查字符串 8)检查如果不是 2.切片字符串 1)切片 2)从头开始切片 3)切到最…

数学建模学习笔记(十一)——预测模型

文章目录一、综述二、灰色预测简介三、GM&#xff08;1, 1&#xff09;模型四、使用灰色系统建模的前提 —— 准指数规律检验五、对于GM(1, 1)的检验六、GM&#xff08;1, 1&#xff09;模型的拓展七、什么时候使用灰色预测八、神经网络模型一、综述 本文首先介绍了灰色预测模…

python基础入门(4)之布尔值

目录 一、Python布尔值 1)比较 2)评估值和变量 3)布尔真值 4)布尔假值 5)函数可以返回布尔值 6)练习题 一、Python布尔值 布尔值表示两个值之一&#xff1a; True或False。在编程中&#xff0c;您经常需要知道表达式是否为 True或False。举一些例子就明白了。 1)比较 当…

C语言if else语句详解

前面我们看到的代码都是顺序执行的&#xff0c;也就是先执行第一条语句&#xff0c;然后是第二条、第三条……一直到最后一条语句&#xff0c;这称为顺序结构。 但是对于很多情况&#xff0c;顺序结构的代码是远远不够的&#xff0c;这时我们就要使用判断语句即if else语句。 …