欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

一文让你彻底搞懂最小二乘法(超详细推导)

最编程 2024-08-15 11:34:35
...

要解决的问题

在工程应用中,我们经常会用一组观测数据去估计模型的参数,模型是我们根据先验知识定下的。比如我们有一组观测数据 ( x i , y i ) (x_i,y_i) (xi,yi)(一维),通过一些数据分析我们猜测 y y y x x x之间存在线性关系,那么我们的模型就可以定为: f ( x ) = k x + b f(x)=kx+b f(x)=kx+b

这个模型只有两个参数,所以理论上,我们只需要观测两组数据建立两个方程,即可解出两个未知数。类似的,假如模型有 n n n个参数,我们只需要观测 n n n组数据就可求出参数,换句话说,在这种情况下,模型的参数是唯一确定解。

但是在实际应用中,由于我们的观测会存在误差(偶然误差、系统误差等),所以我们总会做多余观测。比如在上述例子中,尽管只有两个参数,但是我们可能会观测 n n n组数据 ( x 1 , y 1 ) . . , ( x n , y n ) (x_1, y_1)..,(x_n, y_n) (x1,y1)..,(xn,yn),这会导致我们无法找到一条直线经过所有的点,也就是说,方程无确定解。
在这里插入图片描述

于是这就是我们要解决的问题:虽然没有确定解,但是我们能不能求出近似解,使得模型能在各个观测点上达到“最佳“拟合。那么“最佳”的准则是什么?可以是所有观测点到直线的距离和最小,也可以是所有观测点到直线的误差(真实值-理论值)绝对值和最小,也可以是其它,如果是你面临这个问题你会怎么做?

早在19世纪,勒让德就认为让“误差的平方和最小”估计出来的模型是最接近真实情形的。

为什么就是误差平方而不是其它的,这个问题连欧拉、拉普拉斯都未能成功回答,后来是高斯建立了一套误差分析理论,从而证明了确实是使误差平方和最小的情况下系统是最优的。理论的证明也并不难,我写在了另外一篇博客 最小二乘法的原理理解,相信你了解后会对最小二乘法有更深刻的认识。

按照勒让德的最佳原则,于是就是求:
L = ∑ i = 1 n ( y i − f ( x ) ) 2 L=\sum_{i=1}^{n}\left(y_i-f(x)\right)^{2} L=i=1n(yif(x))2
这个目标函数取得最小值时的函数参数,这就是最小二乘法的思想,所谓“二乘”就是平方的意思。从这里我们可以看到,最小二乘法其实就是用来做函数拟合的一种思想

至于怎么求出具体的参数那就是另外一个问题了,理论上可以用导数法、几何法,工程上可以用梯度下降法。下面以最常用的线性回归为例进行推导和理解。

线性回归

线性回归因为比较简单,可以直接推导出解析解,而且许多非线性的问题也可以转化为线性问题来解决,所以得到了广泛的应用。甚至许多人认为最小二乘法指的就是线性回归,其实并不是,最小二乘法就是一种思想,它可以拟合任意函数,线性回归只是其中一个比较简单而且也很常用的函数,所以讲最小二乘法基本都会以它为例。

下面我会先用矩阵法进行推导,然后再用几何法来帮助你理解最小二乘法的几何意义。

矩阵解法

线性回归定义为: h θ ( x 1 , x 2 , … x n − 1 ) = θ 0 + θ 1 x 1 + … + θ n − 1 x n − 1 h_{\theta}\left(x_{1}, x_{2}, \ldots x_{n-1}\right)=\theta_{0}+\theta_{1} x_{1}+\ldots+\theta_{n-1} x_{n-1} hθ(x1,x2,xn1)=θ0+θ1x1++θn1xn1 θ \theta θ为参数)假设现在有 m m m个样本,每个样本有 n − 1 n-1 n1维特征,将所有样本点代入模型中得:
h 1 = θ 0 + θ 1 x 1 , 1 + θ 2 x 1 , 2 + … + θ n − 1 x 1 , n − 1 h 2 = θ 0 + θ 1 x 2 , 1 + θ 2 x 2 , 2 + … + θ n − 1 x 2 , n − 1 ⋮ h m = θ 0 + θ 1 x m , 1 + θ 2 x m , 2 + … + θ n − 1 x m , n − 1 \begin{array}{l} h_{1}=\theta_{0}+\theta_{1} x_{1,1}+\theta_{2} x_{1,2}+\ldots+\theta_{n-1} x_{1,n-1} \\ h_{2}=\theta_{0}+\theta_{1} x_{2,1}+\theta_{2} x_{2,2}+\ldots+\theta_{n-1} x_{2,n-1}\\ \vdots \\ h_{m}=\theta_{0}+\theta_{1} x_{m, 1}+\theta_{2} x_{m, 2}+\ldots+\theta_{n-1} x_{m, n-1} \end{array} h1=θ0+θ1x1,1+θ2x1,2++θn1x1,n1h2=θ0+θ1x2,1+θ2x2,2++θn1x2,n1hm=θ0+θ1xm,1+θ2xm,2++θn1xm,n1为方便用矩阵表示,我们令 x 0 = 1 x_0=1 x0=1,于是上述方程可以用矩阵表示为:
h = X θ \mathbf{h}=\mathbf{X} \theta h=Xθ其中, h \mathbf{h} h为mx1的向量, 代表模型的理论值, θ \theta θ 为nx1的向量, X X X为mxn维的矩阵, m m m代表样本的个数, n n n代表样本的特征数,于是目标损失函数用矩阵表示为:
J ( θ ) = ∥ h − Y ∥ 2 = ∥ X θ − Y ∥ 2 = ( X θ − Y ) T ( X θ − Y ) J(\theta)=\|\mathbf{h}-\mathbf{Y}\|^2 =\|\mathbf{X}\theta-\mathbf{Y}\|^2= (\mathbf{X} \theta-\mathbf{Y})^{T}(\mathbf{X} \theta-\mathbf{Y}) J(θ)=hY2=XθY2=(XθY)T(XθY)其中 Y \mathbf{Y} Y是样本的输出向量, 维度为mx1。

根据高数知识我们知道函数取得极值就是导数为0的地方,所以我们只需要对损失函数求导令其等于0就可以解出 θ \theta θ。矩阵求导属于矩阵微积分的内容,我也是现学的(…,这里先介绍两个用到的公式:
∂ x T a