【数学基础】最小二乘法

【fishing-pan:https://blog.youkuaiyun.com/u013921430 转载请注明出处】

前言

   当我们有NNN组数据,希望能够用一个函数来拟合这组数据的分布情况时,首先想到的就是最小二乘法。最小二乘法是线性回归中最基础也是最常用模型,它也可以用来拟合高次多项式。

什么是最小二乘法

  那么,什么是最小二乘法呢?将我们手中已有的数据表示成一个集合,(为了简化模型,暂且只考虑输入属性只有xxx一个的情况)D={(x1;y1),(x2;y2),⋯ ,(xn;yn)}D=\left \{ (x_{1};y_{1}),(x_{2};y_{2}),\cdots ,(x_{n};y_{n}) \right \}D={(x1;y1),(x2;y2),,(xn;yn)}
  首先假设最终得到的线性模型为;
y=ax+by=ax+by=ax+b
在这里插入图片描述
  如上图所示,绿色的线条为所求的回归模型,黑色点为实际样本输入数据,红色线段为实际值与模型预测值之间的欧氏距离,用以下公式表示;
ei=∥axi+b−yi∥e_{i}=\left \| ax_{i}+b-y_{i} \right \|ei=axi+byi
  为了让最终所求的模型尽量准确地表现数据分布规律,我们需要让eie_{i}ei的和尽可能的小,所以(a∗,b∗)(a^{*},b^{*})(a,b)eie_{i}ei的和取最小值时取得;
(a∗,b∗)=argmin(a,b)∑i=1n∥axi+b−yi∥(a^{*},b^{*})=\underset{(a,b)}{argmin}\sum_{i=1}^{n}\left \| ax_{i}+b-y_{i} \right \|(a,b)=(a,b)argmini=1naxi+byi
   但是上述式子中的绝对值是不可导的,求解困难。因此采用均方误差来代替绝对值。
(a∗,b∗)=argmin(a,b)∑i=1n(axi+b−yi)2(a^{*},b^{*})=\underset{(a,b)}{argmin}\sum_{i=1}^{n} (ax_{i}+b-y_{i} )^{2}(a,b)=(a,b)argmini=1n(axi+byi)2
  这种基于均方误差来进行模型求解的方法就叫最小二乘法,也叫最小平方法。

参数推导

  首先还是来看上面提到的最简单的情况。令;
E(a,b)=∑i=1n(axi+b−yi)2E(a,b)=\sum_{i=1}^{n} (ax_{i}+b-y_{i} )^{2}E(a,b)=i=1n(axi+byi)2
  EEE是关于aaabbb的二次函数,只会有一个极值点。而很明显,让EEE取极大值的(a,b)(a,b)(a,b)出现在空间中无限远处的,是不存在的。所以当(a,b)(a,b)(a,b)EEE取得极值时,EEE取得极小值,分别对aaabbb求偏导。
∂E∂a=2∑i=1n(axi+b−yi)xi=2(∑i=1naxi2+∑i=1nbxi−∑i=1nyixi)=2(∑i=1naxi2+b∗nxˉ−∑i=1nyixi) \begin{aligned} \frac{\partial E}{\partial a}&=2\sum_{i=1}^{n} (ax_{i}+b-y_{i} )x_{i}\\ &=2(\sum_{i=1}^{n} ax_{i}^{2}+\sum_{i=1}^{n}bx_{i}-\sum_{i=1}^{n}y_{i}x_{i})\\&=2(\sum_{i=1}^{n} ax_{i}^{2}+b*n\bar{x}-\sum_{i=1}^{n}y_{i}x_{i}) \end{aligned} aE=2i=1n(axi+byi)xi=2(i=1naxi2+i=1nbxii=1nyixi)=2(i=1naxi2+bnxˉi=1nyixi)
∂E∂b=2∑i=1n(axi+b−yi)=2(a∗nxˉ+nb−nyˉ) \frac{\partial E}{\partial b}=2\sum_{i=1}^{n} (ax_{i}+b-y_{i} )=2(a*n\bar{x}+nb-n\bar{y}) bE=2i=1n(axi+byi)=2(anxˉ+nbnyˉ)
  令;
∂E∂a=0,∂E∂b=0\frac{\partial E}{\partial a}=0,\frac{\partial E}{\partial b}=0aE=0bE=0
  可得;
a=∑i=1nxiyi−nxˉyˉ∑i=1nxi2−nxˉ2a=\frac{\sum_{i=1}^{n}x_{i}y_{i}-n\bar{x}\bar{y}}{\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2}}a=i=1nxi2nxˉ2i=1nxiyinxˉyˉ
b=yˉ−axˉ=yˉ∑i=1nxi2−xˉ∑i=1nxiyi∑i=1nxi2−nxˉ2b=\bar{y}-a\bar{x}=\frac{\bar{y}\sum_{i=1}^{n}x_{i}^{2}-\bar{x}\sum_{i=1}^{n}x_{i}y_{i}}{\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2}} b=yˉaxˉ=i=1nxi2nxˉ2yˉi=1nxi2xˉi=1nxiyi
  由于,
∑i=1n(xi−xˉ)(yi−yˉ)=∑i=1n(xiyi−xiyˉ−yixˉ+xˉyˉ)=∑i=1nxiyi−yˉ∑i=1nxi−xˉ∑i=1nyi+nxˉyˉ=∑i=1nxiyi−nxˉyˉ \begin{aligned} \sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})&=\sum_{i=1}^{n}(x_{i}y_{i}-x_{i}\bar{y}-y_{i}\bar{x}+\bar{x}\bar{y})\\ &=\sum_{i=1}^{n}x_{i}y_{i}-\bar{y}\sum_{i=1}^{n}x_{i}-\bar{x}\sum_{i=1}^{n}y_{i}+n\bar{x}\bar{y}\\ &=\sum_{i=1}^{n}x_{i}y_{i}-n\bar{x}\bar{y} \end{aligned} i=1n(xixˉ)(yiyˉ)=i=1n(xiyixiyˉyixˉ+xˉyˉ)=i=1nxiyiyˉi=1nxixˉi=1nyi+nxˉyˉ=i=1nxiyinxˉyˉ
  同理,
∑i=1n(xi−xˉ)2=∑i=1nxi2−nxˉ2\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}=\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2} i=1n(xixˉ)2=i=1nxi2nxˉ2
  所以aaa还可以表示成,
a=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2 a=\frac{\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})}{\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}} a=i=1n(xixˉ)2i=1n(xixˉ)(yiyˉ)

多元线性回归

  上述的推导中输入属性数目为一,在一般的情况下,样本的属性会有多个,所以通过矩阵的形式将上述推导过程进行推广。假设数据集DDD中样本属性有ddd个;将第iii个样本可以表示成以下形式;
(xi1;xi2;⋯ ;xid;y)(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d};y)(xi1;xi2;;xid;y)
  用向量 xi{\textbf{x}}_{i}xi表示 ddd 个属性,w{\textbf{w}}w表示参数的向量;
xi=(xi1;xi2;⋯ ;xid){\textbf{x}}_{i}=(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d})xi=(xi1;xi2;;xid)
w=(w1;w2;⋯ ;wd){\textbf{w}}=(w_{1};w_{2};\cdots ;w_{d})w=(w1;w2;;wd)
  则回归模型可以表示成;
f(xi)=wTxi+bf({\textbf{x}}_{i})={\textbf{w}}^{T}{\textbf{x}}_{i}+bf(xi)=wTxi+b
  为了便于讨论,令
w^=(w;b)\hat{\textbf{w}}=({\textbf{w}};b)w^=(w;b)
  对应的将x{\textbf{x}}x也增加一项;
xi=(xi1;xi2;⋯ ;xid;1){\textbf{x}}_{i}=(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d};1)xi=(xi1;xi2;;xid;1)
f(xi)=w^Txif({\textbf{x}}_{i})=\hat{\textbf{w}}^{T}{\textbf{x}}_{i}f(xi)=w^Txi
X=(x11x12⋯x1d1x21x22⋯x2d1⋮⋱⋱⋮⋮xn1xn2⋯xnd1)=(x1T1x2T1⋮⋮xnT1){\textbf{X}}=\begin{pmatrix} x_{1}^{1} & x_{1}^{2} & \cdots & x_{1}^{d} &1 \\ x_{2}^{1} & x_{2}^{2} & \cdots & x_{2}^{d} &1\\ \vdots & \ddots & \ddots &\vdots & \vdots \\ x_{n}^{1} & x_{n}^{2} & \cdots & x_{n}^{d} &1 \end{pmatrix}=\begin{pmatrix} {\textbf{x}}_{1}^{T} &1 \\ {\textbf{x}}_{2}^{T} &1 \\ \vdots &\vdots \\ {\textbf{x}}_{n}^{T} & 1 \end{pmatrix}X=x11x21xn1x12x22xn2x1dx2dxnd111=x1Tx2TxnT111
  同样地; y=(y1;y2;⋯ ;yn){\textbf{y}}=({y}_{1};{y}_{2};\cdots;{y}_{n})y=(y1;y2;;yn),那么与上面的类似,有;
w^∗=arg minw^(y−Xw^)T(y−Xw^)\hat{\textbf{w}}^{*}=\underset{\hat{\textbf{w}}}{arg\, min}({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})^{T}({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})w^=w^argmin(yXw^)T(yXw^)
  令E=(y−Xw^)T(y−Xw^)E=({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})^{T}({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})E=(yXw^)T(yXw^);对w^\hat{\textbf{w}}w^求偏导数;
∂E∂w^=2XT(Xw^−y)\frac{\partial E}{\partial \hat{\textbf{w}}}=2{\textbf{X}}^{T}({\textbf{X}}\hat{\textbf{w}}-\textbf{y})w^E=2XT(Xw^y)
  最终所求
w^∗=(XTX)−1XTy\hat{\textbf{w}}^{*}=({\textbf{X}}^{T}{\textbf{X}})^{-1}{\textbf{X}}^{T}\textbf{y}w^=(XTX)1XTy

继续推广延伸

  更一般的,可以将这种线性回归用于非线性函数的拟合;例如对于对数函数;
f(xi)=y=ln(wTxi+b)f({\textbf{x}}_{i})=y=ln({\textbf{w}}^{T}{\textbf{x}}_{i}+b)f(xi)=y=ln(wTxi+b)
  可以利用反函数,将其转换成h=ey=wTxi+bh=e^{y}={\textbf{w}}^{T}{\textbf{x}}_{i}+bh=ey=wTxi+b;成为一个线性回归的问题,最终再转换成对数形式;

  甚至可以用最小二乘法拟合多项式曲线。
y=a0+a1x+a2x2+⋯+amxmy=a_{0}+a_{1}x+a_{2}x^{2}+\cdots +a_{m}x^{m}y=a0+a1x+a2x2++amxm
X=(x1mx1m−1⋯x111x2mx2m−1⋯x211⋮⋱⋱⋮⋮xnmxnm−1⋯xn11){\textbf{X}}=\begin{pmatrix} x_{1}^{m} & x_{1}^{m-1} & \cdots & x_{1}^{1} &1 \\ x_{2}^{m} & x_{2}^{m-1} & \cdots & x_{2}^{1} &1\\ \vdots & \ddots & \ddots &\vdots & \vdots \\ x_{n}^{m} & x_{n}^{m-1} & \cdots & x_{n}^{1} &1 \end{pmatrix}X=x1mx2mxnmx1m1x2m1xnm1x11x21xn1111
  此时上标mmm不再表示第mmm个属性,而是表示mmm次幂;在修改过X{\textbf{X}}X后,最终w^∗\hat{\textbf{w}}^{*}w^依然表示为;
w^∗=(XTX)−1XTy\hat{\textbf{w}}^{*}=({\textbf{X}}^{T}{\textbf{X}})^{-1}{\textbf{X}}^{T}\textbf{y}w^=(XTX)1XTy

Matlab 实现高次多项式拟合

  用Matlab实现了最小二乘法一元高次多项式拟合;代码如下;

**%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%不用先生,2018.11.22,最小二乘法一元高次多项式拟合
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
xi=[-1,0,2,3,4,5,8,9,10,15,20];
yi=[-2,-0.5,1.5,2.8,2.8,3.9,7.6,7.5,8,13,16.5];

[~,n]=size(xi);
m=8;     %%最高8次多项式;
W=zeros(m+1,m);

for i=1:m
     X=zeros(n,i+1);    %%创建一个n*+1的矩阵;
    for j=1:n
        for s=1:i          
            X(j,s)=xi(j)^(i+1-s);   %%计算矩阵中每一个元素的值
        end
        X(j,i+1)=1;
    end
    XX=inv(X'*X)*X'*yi';  %%得到系数并赋值
    for j=1:i+1
        W(j,i)=XX(j);
    end 
end
   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%构造方程,画图
x=-5:0.01:25;
for i=1:m
    y=W(1,i)*x.^i;
    for j=2:i+1
        y=y+W(j,i)*x.^(i-j+1);
    end   
    subplot(2,4,i);
    plot(xi,yi,'*');
    hold on;
    plot(x,y);
    hold off
end
suptitle('用1到8次多项式拟合')
**

在这里插入图片描述
  很明显,在高次多项式拟合时,曲线边缘出现了龙格现象。

参考

《机器学习》,周志华 著,清华大学出版社;

已完。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值