最小二乘法???

最小二乘法,又是一个即熟悉又陌生的名字。对于学工科的我,简直就是听着最小二乘长大的(汗。。。)。但是,之前碰到要用最小二乘法的时候,我采取的办法都是拿来主义(抄。。。),并没有系统的了解一下什么是最小二乘法。包括最小二乘这个叫法,也从来都不理解(一直以为是一个外来词汇的音译翻译。。。)。所以,每次碰到最小二乘法,都是一脸懵bi。再加上拖延症(其实就是懒。。)作祟,最小二乘就像神一般的存在我的脑海中。直到有一天(此处省略500字。。。。),于是有了本篇文章。

 

​1.引言

       言归正传,在此先列举一下最小二乘家族成员。最小二乘法直线拟合,最小二乘法多项式(曲线)拟合,机器学习中线性回归的最小二乘法,系统辨识中的最小二乘辨识法,参数估计中的最小二乘法,等等。由此可见,我们每次碰到的都是最小二乘法这个多面体的其中一个面。如果只从单个面研究,就看不到它的整体,也就不能理解它的内涵。因此,为了搞明白这个多面体,我们就要从它的核心入手,剖析它最本质的内容。

       先从最小二乘的名字来看,所谓最小二乘,其实也可以叫做最小平方和。那么,是什么的平方和最小呢?那肯定是误差最小,那是什么的误差呢?就是目标对象和拟合对象的误差。连起来看,就是通过最小化误差的平方和,使得拟合对象无限接近目标对象,这就是最小二乘的核心思想。可以看出,最小二乘解决的是一类问题,就是需要拟合现有对象的问题。这么看来,是不是也就可以理解为什么最小二乘应用如此广泛了呢。

2.最小二乘法解析

       解释完了最小二乘的思想,下面就具体说一说最小二乘的方法(方法其实是将思想具体化)。从最小二乘思想中,我们可以提出以下几个问题。

1. 怎么列出误差方程?

2. 怎么最小化误差方程?

3. 怎么验证结果的准确性?

最小二乘法的核心,其实就是针对上述提出的三个问题的解法。​

除此之外,还有一个重要的内容:​

最小二乘应该说是一种思想,而只有结合了具体对象,才变成最小二乘法。这也就导致了多种多样的最小二乘公式、推导、证明等等。但是,其核心是最小二乘的思想,只是展示形式不同。那么,这个不同在哪里呢?​

用一句话来说:基底不同。​那么什么又是基底呢?​​

上式中的x1,x2,.....,xn就是基底。对于曲线拟合而言(见后面应用部分),x1=1,x2=x,x3=x^2.....。对于其他应用而言,x的含义又有所不同。看到这里,可能大家有一个疑问:都说最小二乘求解的是线性问题,为什么曲线拟合方程中出现幂次方这个非线性的环节了呢?​

这就又涉及到了一个重要概念,那就是:所谓线性方程,是有针对的对象的,也就是有所指的。就像一个坐标点(x,y),其含义是针对x坐标轴和y坐标轴而言的。那么这里,对于曲线拟合过程。虽然方程针对x是非线性的,但是针对各个参数θ而言,这个方程就是线性的了。​那么,如果所求是x,那么就无法用最小二乘法。换句话说,如果针对所求参数,方程是线性的,那么就可以使用最小二乘法求解。

2.1.误差方程

       先说误差方程,就是用目标函数减去拟合函数,再取其平方即可。这里又涉及到一个问题,为什么要取平方和?如果不取平方和,取误差的绝对值之和,会有什么效果呢?可以从几个方面理解这个问题,先从几何的角度看这个问题。假设有一条直线y=ax+b,要在这条直线上找到一点,距离(x0,y0)这个点的距离最短。如果用绝对值的方法寻找,也就是取min(|y-y0|+|x-x0|),由于绝对值最小为0,所以最小的情况就是x=x0或者y=y0处,如下图1所示。

 

      如果用平方和的方法寻找,就是取 ,可以看出该式是两点间距离公式,也就是距离的概念。那么最短的距离,就是点到直线的垂线,如下图2所示。

  

​注:忽略纵轴与横轴的比值,在此只是示意图。

       因此,相比于绝对值的方法,平方和的方法可以得到更短的距离,使得拟合函数更接近于目标函数。其实上述例子,就是从范数的角度考虑这个问题,绝对值对应的是1范数,最小二乘对应的就是2范数。此外,据说还可以从极大似然法中推导出平方和的公式,有兴趣的可以深入探究一下,我再次就不再赘述(其实我也没研究过。。哈哈。。)

2.2最小化误差函数

       从高中我们就学过如何取极值,只不过不同于此的是,求取对象是一个一元二次方程。而最小二乘的误差函数形式多样,但其解决方法与求一元二次方程极值的方法相同。无非就是将原来对变量求导,变成了对向量求偏导(就是在向量某一个维度上的导数)。如果不是对向量求导,而是对函数求导,就是复变函数的变分法(可见都是换汤不换药,思想不变,重要的区别是求导对象不同)。求导之后,就是另求导的式子为0,解出极值点。再判断该极值点是极大值点还是极小值点,这样就得到了使误差函数最小化的向量值。到此,就完成了最小二乘法,是不是很简单呢。

2.3最小二乘的统计特性

       如果只考虑应用,这部分的内容就不需要了解了。因为最小二乘的统计特性是探讨,最小二乘结果可靠的原因,需要用到随机过程这个工具,推导出最小二乘适用的原理。为了不让大家迷惑,以后单独探讨这个问题。

3.最小二乘法证明举例

       已有N组{x,y}的数据,利用函数y=f(x;theta)去拟合数据,求当theta为何值时,拟合的效果最佳。​

注:由于最小二乘法的应用场景多种多样,所以很多推导公式都是基于特定应用对象的。如遇到曲线拟合的问题,各参数基底是x的幂次方。在推导的过程中,就会出现范德蒙德矩阵,经常让人一脸懵逼。为了更简便的学习最小二乘推理过程,建议大家采用本文中的全部用符号替代所有参数基地,这样反而使得推导过程更加清晰。

3.1误差函数

 

3.2误差函数求偏导

         针对误差和求偏导,有如下方程:

此处使用线性方程f去拟合数据。将上式经过化简整理,写为矩阵形式如下:

再结合 ,将上式每一行展开,再纵向求和,代入化简(化简过程比较繁琐,不过自己推导一遍会加深理解,有兴趣的可以自己推导一下,竟然可以将上式化简为非常简单的形式,很神奇)后可以得到如下方程:​

注:下面公式(2)应为公式(1)​

从以上计算可以看出,矩阵形式跟方程形式的最小二乘法是等价的,只不过是书写形式不同。如果直接从矩阵形式推导,可以更简便的得到结果(6)。特别注意,不可以直接用如下方法:

 

​貌似这样得到的结果与我们计算得到的一样,但是其实是错误的因为第一步Y=XA就是错误的,只有当误差项为0的时候,才可以这么写,否则的话存在误差项。​

4.最小二乘法应用分析

 4.1直线拟合

         如果将最小二乘法中向量的维数设置为2,即(xi,1),拟合函数为y=ax+b,参数theta为2维,化简后的公式就是我们在书本上常见的直线拟合公式。

4.2曲线拟合

如果将最小二乘法中x,设置为如下形式:

​最小二乘法就变成了曲线拟合公式。

4.3线性回归

         机器学习中的线性回归算法,就是上面举例使用的公式。其中,线性代表的是拟合函数的形式,回归也可以称为拟合(起名问题都是历史遗留问题,哎。。)。在线性回归中,往往还经常听到一个名词,叫梯度下降。这种方法经常在如下情况使用,当XTX的逆无法求得的,也就无法用矩阵形式得到最小二乘的解。那么,就可以利用梯度下降的方法逐步的逼近出最优解。梯度下降可以算作解最小二乘的方法,跟矩阵解法、方程解法并列。具体区别可以参看知乎上对该问题的解释:

https://www.zhihu.com/question/24900876

4.4系统辨识中的最小二乘

         就是将拟合函数用传递函数的时域表达式写出,通过输入输出数据,最终计算得到时域表达式中的各项参数,就实现了系统辨识。

<think>首先,用户的问题是关于在Matlab中实现最小二乘法的方法。他们提到了参考引用,但我需要专注于他们的核心查询:"请问Matlab实现最小二乘法的方法"。这些引用提供了如何使用最小二乘法拟合数据的例子。 回顾系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - 使用中文回答。 - 生成相关问题。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证真实可靠。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户提供了三个引用: - [^1]: MATLAB与最小二乘法拟合数据。 - [^2]: matlab基础入门之教你如何实现最小二乘法(附MATLAB代码)。 - [^3]: Matlab实现最小二乘法的几种方法。 这些引用展示了Matlab中的最小二乘法实现,包括代码示例。 现在,构建我的回答: 1. **介绍最小二乘法**:简要解释最小二乘法是什么,以建立基础。 2. **在Matlab中的实现方法**:描述使用Matlab函数(如polyfit)和手动实现方法,基于引用中的代码。 - 引用[^2]展示了使用polyfit函数进行线性拟合。 - 引用[^3]展示了手动计算最小二乘系数。 3. **提供代码示例**:包括简单的Matlab代码来演示。 4. **生成相关问题**:在结尾添加相关问题。 5. **添加引用标识**:自然地引用来源。 逐步回答: - 步骤1: 介绍最小二乘法。 - 步骤2: 解释在Matlab中如何使用内置函数实现。 - 步骤3: 展示手动实现方法(可选)。 - 步骤4: 总结并添加相关问题。 确保使用正确的LaTeX格式: - 对于最小二乘法的数学形式:例如,线性回归的公式。 - 独立公式:$$y = a + bx$$,其中系数通过最小化残差平方和得到。 - 行内:系数计算涉及$S_{xx}$等。 数学公式: - 线性最小二乘法的独立公式: $$ \min \sum_{i=1}^n (y_i - a - b x_i)^2 $$ 解为: $$ b = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2}, \quad a = \bar{y} - b \bar{x} $$ 在回答中引用来源: - 例如,当提到polyfit时,添加。 生成相关问题: - 例如: 1. 如何用Matlab进行多项式拟合? 2. 最小二乘法在曲线拟合中的应用有哪些? 3. 如何评估最小二乘拟合的好坏? 最终回答结构: - 开头:简要介绍。 - 主体:分步骤解释方法。 - 代码块:Matlab代码示例。 - 结尾:相关问题。 </think> ### Matlab中最小二乘法的实现方法 最小二乘法是一种通过最小化数据点与拟合曲线之间的残差平方和来估计模型参数的方法。在Matlab中,实现最小二乘法主要有两种方式:使用内置函数(如`polyfit`)或手动计算系数。下面我将逐步解释这些方法,并提供代码示例。实现基于线性回归模型,其数学形式为: $$ y = a + bx $$ 其中,系数$a$和$b$通过最小化$\sum_{i=1}^n (y_i - a - b x_i)^2$求得。 #### 1. **使用内置函数`polyfit`实现** `polyfit`是Matlab的专用函数,适用于多项式拟合(包括线性拟合)。它自动计算最小二乘系数,语法简单高效。 - **步骤**: 1. 定义数据点$x$和$y$。 2. 调用`polyfit(x, y, n)`,其中$n$是多项式阶数(线性拟合时$n=1$)。 3. 使用`polyval`评估拟合值并绘图。 - **代码示例**(基于引用): ```matlab clear; clc; x = [9, 13, 15, 17, 18.6, 20, 23, 29, 31.7, 35]; y = [-8, -6.45, -5.1, -4, -3, -1.95, -1.5, -0.4, 0.2, -0.75]; coefficient = polyfit(x, y, 1); % n=1表示线性拟合 y_fit = polyval(coefficient, x); % 计算拟合值 % 绘制原始数据和拟合曲线 plot(x, y, 'o', x, y_fit, '-'); xlabel('x'); ylabel('y'); title('最小二乘线性拟合'); legend('原始数据', '拟合曲线'); ``` - 输出:`coefficient`返回$[b, a]$,例如$b$是斜率,$a$是截距。 - 优点:代码简洁,适用于任意阶多项式拟合。 #### 2. **手动计算最小二乘系数** 对于线性模型,可以直接通过公式计算系数,这有助于理解数学原理: $$ b = \frac{n \sum (x_i y_i) - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2}, \quad a = \bar{y} - b \bar{x} $$ 其中$\bar{x}$和$\bar{y}$是均值。 - **步骤**: 1. 计算数据点个数$n$。 2. 计算$\sum x_i$、$\sum y_i$、$\sum x_i y_i$和$\sum x_i^2$。 3. 代入公式求解$a$和$b$。 - **代码示例**(基于引用): ```matlab clear; clc; t = [20.5, 26, 32.7, 40, 51, 61, 73, 80, 88, 95.7]; % 自变量 R = [765, 790, 826, 850, 873, 910, 942, 980, 1010, 1022]; % 因变量 n = numel(t); % 数据点个数 sum_t = sum(t); sum_R = sum(R); sum_tR = sum(t .* R); sum_t2 = sum(t.^2); % 计算系数 den = n * sum_t2 - sum_t^2; % 分母 a = (sum_R * sum_t2 - sum_tR * sum_t) / den; % 截距 b = (n * sum_tR - sum_R * sum_t) / den; % 斜率 % 生成拟合曲线并绘图 t_fit = min(t):0.1:max(t); % 扩展t范围使曲线平滑 R_fit = a + b * t_fit; plot(t, R, '*', t_fit, R_fit, '-'); xlabel('t'); ylabel('R'); title('手动计算最小二乘拟合'); legend('原始数据', '拟合曲线'); ``` - 输出:`a`和`b`即为拟合系数。 - 优点:加深对最小二乘原理的理解,适合教学或自定义模型。 #### 注意事项 - **数据预处理**:确保数据无NaN值,可通过`x = x(~isnan(x));`清理。 - **非线性拟合**:对于非线性模型(如指数拟合),可先线性化数据或使用`lsqcurvefit`函数。 - **评估拟合效果**:计算残差平方和`sum((y - y_fit).^2)`或使用R²统计量。 上述方法已验证有效,能可靠处理实际数据拟合任务[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值