前言
当我们有
N
N
N 组数据,希望能够用一个函数来拟合这组数据的分布情况时,首先想到的就是最小二乘法。最小二乘法是线性回归中最基础也是最常用模型,它也可以用来拟合高次多项式。
什么是最小二乘法
那么,什么是最小二乘法呢?将我们手中已有的数据表示成一个集合,(为了简化模型,暂且只考虑输入属性只有
x
x
x 一个的情况)
D
=
{
(
x
1
;
y
1
)
,
(
x
2
;
y
2
)
,
⋯
 
,
(
x
n
;
y
n
)
}
D=\left \{ (x_{1};y_{1}),(x_{2};y_{2}),\cdots ,(x_{n};y_{n}) \right \}
D = { ( x 1 ; y 1 ) , ( x 2 ; y 2 ) , ⋯ , ( x n ; y n ) } 首先假设最终得到的线性模型为;
y
=
a
x
+
b
y=ax+b
y = a x + b 如上图所示,绿色的线条为所求的回归模型,黑色点为实际样本输入数据,红色线段为实际值与模型预测值之间的欧氏距离,用以下公式表示;
e
i
=
∥
a
x
i
+
b
−
y
i
∥
e_{i}=\left \| ax_{i}+b-y_{i} \right \|
e i = ∥ a x i + b − y i ∥ 为了让最终所求的模型尽量准确地表现数据分布规律,我们需要让
e
i
e_{i}
e i 的和尽可能的小,所以
(
a
∗
,
b
∗
)
(a^{*},b^{*})
( a ∗ , b ∗ ) 在
e
i
e_{i}
e i 的和取最小值时取得;
(
a
∗
,
b
∗
)
=
a
r
g
m
i
n
(
a
,
b
)
∑
i
=
1
n
∥
a
x
i
+
b
−
y
i
∥
(a^{*},b^{*})=\underset{(a,b)}{argmin}\sum_{i=1}^{n}\left \| ax_{i}+b-y_{i} \right \|
( a ∗ , b ∗ ) = ( a , b ) a r g m i n i = 1 ∑ n ∥ a x i + b − y i ∥ 但是上述式子中的绝对值是不可导的,求解困难。因此采用均方误差来代替绝对值。
(
a
∗
,
b
∗
)
=
a
r
g
m
i
n
(
a
,
b
)
∑
i
=
1
n
(
a
x
i
+
b
−
y
i
)
2
(a^{*},b^{*})=\underset{(a,b)}{argmin}\sum_{i=1}^{n} (ax_{i}+b-y_{i} )^{2}
( a ∗ , b ∗ ) = ( a , b ) a r g m i n i = 1 ∑ n ( a x i + b − y i ) 2 这种基于均方误差来进行模型求解的方法就叫最小二乘法,也叫最小平方法。
参数推导
首先还是来看上面提到的最简单的情况。令;
E
(
a
,
b
)
=
∑
i
=
1
n
(
a
x
i
+
b
−
y
i
)
2
E(a,b)=\sum_{i=1}^{n} (ax_{i}+b-y_{i} )^{2}
E ( a , b ) = i = 1 ∑ n ( a x i + b − y i ) 2
E
E
E 是关于
a
a
a 与
b
b
b 的二次函数,只会有一个极值点。而很明显,让
E
E
E 取极大值的
(
a
,
b
)
(a,b)
( a , b ) 出现在空间中无限远处的,是不存在的。所以当
(
a
,
b
)
(a,b)
( a , b ) 让
E
E
E 取得极值时,
E
E
E 取得极小值,分别对
a
a
a 、
b
b
b 求偏导。
∂
E
∂
a
=
2
∑
i
=
1
n
(
a
x
i
+
b
−
y
i
)
x
i
=
2
(
∑
i
=
1
n
a
x
i
2
+
∑
i
=
1
n
b
x
i
−
∑
i
=
1
n
y
i
x
i
)
=
2
(
∑
i
=
1
n
a
x
i
2
+
b
∗
n
x
ˉ
−
∑
i
=
1
n
y
i
x
i
)
\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}
∂ a ∂ E = 2 i = 1 ∑ n ( a x i + b − y i ) x i = 2 ( i = 1 ∑ n a x i 2 + i = 1 ∑ n b x i − i = 1 ∑ n y i x i ) = 2 ( i = 1 ∑ n a x i 2 + b ∗ n x ˉ − i = 1 ∑ n y i x i )
∂
E
∂
b
=
2
∑
i
=
1
n
(
a
x
i
+
b
−
y
i
)
=
2
(
a
∗
n
x
ˉ
+
n
b
−
n
y
ˉ
)
\frac{\partial E}{\partial b}=2\sum_{i=1}^{n} (ax_{i}+b-y_{i} )=2(a*n\bar{x}+nb-n\bar{y})
∂ b ∂ E = 2 i = 1 ∑ n ( a x i + b − y i ) = 2 ( a ∗ n x ˉ + n b − n y ˉ ) 令;
∂
E
∂
a
=
0
,
∂
E
∂
b
=
0
\frac{\partial E}{\partial a}=0,\frac{\partial E}{\partial b}=0
∂ a ∂ E = 0 , ∂ b ∂ E = 0 可得;
a
=
∑
i
=
1
n
x
i
y
i
−
n
x
ˉ
y
ˉ
∑
i
=
1
n
x
i
2
−
n
x
ˉ
2
a=\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 = 1 n x i 2 − n x ˉ 2 ∑ i = 1 n x i y i − n x ˉ y ˉ
b
=
y
ˉ
−
a
x
ˉ
=
y
ˉ
∑
i
=
1
n
x
i
2
−
x
ˉ
∑
i
=
1
n
x
i
y
i
∑
i
=
1
n
x
i
2
−
n
x
ˉ
2
b=\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 ˉ − a x ˉ = ∑ i = 1 n x i 2 − n x ˉ 2 y ˉ ∑ i = 1 n x i 2 − x ˉ ∑ i = 1 n x i y i 由于,
∑
i
=
1
n
(
x
i
−
x
ˉ
)
(
y
i
−
y
ˉ
)
=
∑
i
=
1
n
(
x
i
y
i
−
x
i
y
ˉ
−
y
i
x
ˉ
+
x
ˉ
y
ˉ
)
=
∑
i
=
1
n
x
i
y
i
−
y
ˉ
∑
i
=
1
n
x
i
−
x
ˉ
∑
i
=
1
n
y
i
+
n
x
ˉ
y
ˉ
=
∑
i
=
1
n
x
i
y
i
−
n
x
ˉ
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 = 1 ∑ n ( x i − x ˉ ) ( y i − y ˉ ) = i = 1 ∑ n ( x i y i − x i y ˉ − y i x ˉ + x ˉ y ˉ ) = i = 1 ∑ n x i y i − y ˉ i = 1 ∑ n x i − x ˉ i = 1 ∑ n y i + n x ˉ y ˉ = i = 1 ∑ n x i y i − n x ˉ y ˉ 同理,
∑
i
=
1
n
(
x
i
−
x
ˉ
)
2
=
∑
i
=
1
n
x
i
2
−
n
x
ˉ
2
\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}=\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2}
i = 1 ∑ n ( x i − x ˉ ) 2 = i = 1 ∑ n x i 2 − n x ˉ 2 所以
a
a
a 还可以表示成,
a
=
∑
i
=
1
n
(
x
i
−
x
ˉ
)
(
y
i
−
y
ˉ
)
∑
i
=
1
n
(
x
i
−
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 = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ )
多元线性回归
上述的推导中输入属性数目为一,在一般的情况下,样本的属性会有多个,所以通过矩阵的形式将上述推导过程进行推广。假设数据集
D
D
D 中样本属性有
d
d
d 个;将第
i
i
i 个样本可以表示成以下形式;
(
x
i
1
;
x
i
2
;
⋯
 
;
x
i
d
;
y
)
(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d};y)
( x i 1 ; x i 2 ; ⋯ ; x i d ; y ) 用向量
x
i
{\textbf{x}}_{i}
x i 表示
d
d
d 个属性,
w
{\textbf{w}}
w 表示参数的向量;
x
i
=
(
x
i
1
;
x
i
2
;
⋯
 
;
x
i
d
)
{\textbf{x}}_{i}=(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d})
x i = ( x i 1 ; x i 2 ; ⋯ ; x i d )
w
=
(
w
1
;
w
2
;
⋯
 
;
w
d
)
{\textbf{w}}=(w_{1};w_{2};\cdots ;w_{d})
w = ( w 1 ; w 2 ; ⋯ ; w d ) 则回归模型可以表示成;
f
(
x
i
)
=
w
T
x
i
+
b
f({\textbf{x}}_{i})={\textbf{w}}^{T}{\textbf{x}}_{i}+b
f ( x i ) = w T x i + b 为了便于讨论,令
w
^
=
(
w
;
b
)
\hat{\textbf{w}}=({\textbf{w}};b)
w ^ = ( w ; b ) 对应的将
x
{\textbf{x}}
x 也增加一项;
x
i
=
(
x
i
1
;
x
i
2
;
⋯
 
;
x
i
d
;
1
)
{\textbf{x}}_{i}=(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d};1)
x i = ( x i 1 ; x i 2 ; ⋯ ; x i d ; 1 )
f
(
x
i
)
=
w
^
T
x
i
f({\textbf{x}}_{i})=\hat{\textbf{w}}^{T}{\textbf{x}}_{i}
f ( x i ) = w ^ T x i
X
=
(
x
1
1
x
1
2
⋯
x
1
d
1
x
2
1
x
2
2
⋯
x
2
d
1
⋮
⋱
⋱
⋮
⋮
x
n
1
x
n
2
⋯
x
n
d
1
)
=
(
x
1
T
1
x
2
T
1
⋮
⋮
x
n
T
1
)
{\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 = ⎝ ⎜ ⎜ ⎜ ⎛ x 1 1 x 2 1 ⋮ x n 1 x 1 2 x 2 2 ⋱ x n 2 ⋯ ⋯ ⋱ ⋯ x 1 d x 2 d ⋮ x n d 1 1 ⋮ 1 ⎠ ⎟ ⎟ ⎟ ⎞ = ⎝ ⎜ ⎜ ⎜ ⎛ x 1 T x 2 T ⋮ x n T 1 1 ⋮ 1 ⎠ ⎟ ⎟ ⎟ ⎞ 同样地;
y
=
(
y
1
;
y
2
;
⋯
 
;
y
n
)
{\textbf{y}}=({y}_{1};{y}_{2};\cdots;{y}_{n})
y = ( y 1 ; y 2 ; ⋯ ; y n ) ,那么与上面的类似,有;
w
^
∗
=
a
r
g
 
m
i
n
w
^
(
y
−
X
w
^
)
T
(
y
−
X
w
^
)
\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 ^ a r g m i n ( y − X w ^ ) T ( y − X w ^ ) 令
E
=
(
y
−
X
w
^
)
T
(
y
−
X
w
^
)
E=({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})^{T}({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})
E = ( y − X w ^ ) T ( y − X w ^ ) ;对
w
^
\hat{\textbf{w}}
w ^ 求偏导数;
∂
E
∂
w
^
=
2
X
T
(
X
w
^
−
y
)
\frac{\partial E}{\partial \hat{\textbf{w}}}=2{\textbf{X}}^{T}({\textbf{X}}\hat{\textbf{w}}-\textbf{y})
∂ w ^ ∂ E = 2 X T ( X w ^ − y ) 最终所求
w
^
∗
=
(
X
T
X
)
−
1
X
T
y
\hat{\textbf{w}}^{*}=({\textbf{X}}^{T}{\textbf{X}})^{-1}{\textbf{X}}^{T}\textbf{y}
w ^ ∗ = ( X T X ) − 1 X T y
继续推广延伸
更一般的,可以将这种线性回归用于非线性函数的拟合;例如对于对数函数;
f
(
x
i
)
=
y
=
l
n
(
w
T
x
i
+
b
)
f({\textbf{x}}_{i})=y=ln({\textbf{w}}^{T}{\textbf{x}}_{i}+b)
f ( x i ) = y = l n ( w T x i + b ) 可以利用反函数,将其转换成
h
=
e
y
=
w
T
x
i
+
b
h=e^{y}={\textbf{w}}^{T}{\textbf{x}}_{i}+b
h = e y = w T x i + b ;成为一个线性回归的问题,最终再转换成对数形式;
甚至可以用最小二乘法拟合多项式曲线。
y
=
a
0
+
a
1
x
+
a
2
x
2
+
⋯
+
a
m
x
m
y=a_{0}+a_{1}x+a_{2}x^{2}+\cdots +a_{m}x^{m}
y = a 0 + a 1 x + a 2 x 2 + ⋯ + a m x m
X
=
(
x
1
m
x
1
m
−
1
⋯
x
1
1
1
x
2
m
x
2
m
−
1
⋯
x
2
1
1
⋮
⋱
⋱
⋮
⋮
x
n
m
x
n
m
−
1
⋯
x
n
1
1
)
{\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 = ⎝ ⎜ ⎜ ⎜ ⎛ x 1 m x 2 m ⋮ x n m x 1 m − 1 x 2 m − 1 ⋱ x n m − 1 ⋯ ⋯ ⋱ ⋯ x 1 1 x 2 1 ⋮ x n 1 1 1 ⋮ 1 ⎠ ⎟ ⎟ ⎟ ⎞ 此时上标
m
m
m 不再表示第
m
m
m 个属性,而是表示
m
m
m 次幂;在修改过
X
{\textbf{X}}
X 后,最终
w
^
∗
\hat{\textbf{w}}^{*}
w ^ ∗ 依然表示为;
w
^
∗
=
(
X
T
X
)
−
1
X
T
y
\hat{\textbf{w}}^{*}=({\textbf{X}}^{T}{\textbf{X}})^{-1}{\textbf{X}}^{T}\textbf{y}
w ^ ∗ = ( X T X ) − 1 X T y
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次多项式拟合')
**
很明显,在高次多项式拟合时,曲线边缘出现了龙格现象。
参考
《机器学习》,周志华 著,清华大学出版社;
已完。。