最近重新回顾了一下机器学习的算法,把以前学过的再看一遍,然后整理总结在博客上。这次总结一下线性回归,参考书籍为周志华老师的西瓜书。
线性回归顾名思义线性即线性关系,表示两个变量之间存在一次方函数关系 (参考百度百科);回归是一种统计分析的方式,直观的看就是寻找属性和结果之间的映射(函数)。接下来探讨一下常用的线性回归(在连续变量下)
考虑一种最简单的情况:输入的属性只有一个。线性回归试图学的 f ( x i ) = w x i + b 使 得 f ( x i ) ≈ y i f(x_i)=wx_i+b \ \ 使得\ \ f(x_i)\approx y_i f(xi)=wxi+b 使得 f(xi)≈yi
问题在于如何确定w和b,我认为机器学习和深度学习几乎都是在做一件事:最大化和最小化某个式子,就像我们认真做事的时候总想做到最好,不管这种贪心思维是好是坏还是怎么地,它确实是激励着我们,机器学习也不例外。显然在线性回归中,我们希望预测值更接近真实值,那么我需要一个度量的标准,“距离”是一个合适的标准。我准备以后写一篇关于各种距离的分析和总结,敬请期待。
我们使用平方距离(欧式距离) d = ( y ^ − y i ) 2 d=(\widehat{y}-y_i)^{2} d=(y −yi)2来考察预测值和真实值的差距,其实就是均方误差(MSE)。
那么我们的目标是最小化这个d,即求w和b使得d最小。
( w ∗ , b ∗ ) = a r g m i n ∑ i = 1 m ( y ^ − y i ) 2 = a r g m i n ∑ i = 1 m ( y i − w x i − b ) 2 (w*,b*)=\ arg\ \ min \sum\limits_{i=1}^{m}(\widehat{y}-y_i)^{2} \\ ~\\=arg \ \ min\sum\limits_{i=1}^{m}(y_i-wx_i-b)^2 (w∗,b∗)= arg mini=1∑m(y −yi)2 =arg mini=1∑m(yi−wxi−b)2
基于均方误差的求解方法称为“最小二乘法”,一元线性回归就是找一个直线,使得所有的样本到这条直线的欧式距离之和最小。
记 E ( w , b ) E_{(w,b)} E(w,b)为误差之和,分别对w和b求偏导并令其等于0
∂ E ( w , B ) ∂ b = 2 w ∑ i = 1 m x i 2 − 2 ∑ i = 1 m x i ( y i − b ) = 0 ( 1 ) \frac{\partial{E_{(w,B)}}}{\partial{b}}=2w\sum\limits_{i=1}^{m}x_i^2-2\sum\limits_{i=1}^{m}x_i(y_i-b)=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1) ∂b∂E(w,B)=2wi=1∑mxi2−2i=1∑mxi(yi−b)=0 (1) ∂ E ( w , b ) ∂ b = 2 ( m b − ∑ i = 1 m ( y i − w x i ) ) = 0 ( 2 ) \frac{\partial{E_{(w,b)}}}{\partial{b}}=2(mb\ -\ \sum\limits_{i=1}^m(y_i-wx_i))=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2) ∂b∂E(w,b)=2(mb − i=1∑m(yi−wxi))=0 (2)
显然(2)式直接变形一下即可
b = 1 m ∑ i = 1 m ( y i − w x i ) b=\frac{1}{m}\sum\limits_{i=1}^{m}(y_i-wx_i) b=m1i=1∑m(yi−wxi)
对于(1)式就比较复杂啦,这里我参考了这篇博客,我跟着写了一遍,不打公式了,发图吧(懒~~~)
那么我们可以得到结果如下:
w = ∑ i = 1 m y i ( x i − x ‾ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 w=\frac{\sum\limits_{i=1}^{m}y_i(x_i-\overline{x})}{\sum\limits_{i=1}^{m}x_i^2-\frac{1}{m}(\sum\limits_{i=1}^{m}x_i)^2} w=i=1∑mxi2−m1(i=1∑mxi)2i=1∑myi(xi−x)
b = 1 m ∑ i = 1 m ( y i − w x i ) b=\frac{1}{m}\sum\limits_{i=1}^m(yi-wx_i) b=m1i=1∑m(yi−wxi)
现实中处理的数据往往是多元的(有多个属性),此时我们试图学的
f ( x i ) = w ⊤ x i + b 使 得 f ( x i ) ≈ y i f(x_i)=w^\top x_i+b\ \ \ 使得\ \ f(x_i)\approx y_i f(xi)=w⊤xi+b 使得 f(xi)≈yi
假设有n个属性,在西瓜书中,输入量 x i x_i xi被表示成如下形式:
x i = ( x 1 , x 2 , x 3 , . . . , x n , 1 ) x_i=(x_1,x_2,x_3,...,x_n,1) xi=(x1,x2,x3,...,xn,1)
最后一个1会乘以 w w w中最后一个值,代表偏置 b b b。所以这里 x i x_i xi是一个n+1的向量, w w w也是n+1长的,最后一个数代表偏置 b b b。
整个数据集D的属性可以表示为 m ∗ ( n + 1 ) m*(n+1) m∗(n+1)大小的矩阵
X = [ x 1 x 2 . x m ] X=\begin{bmatrix} x_1 \\x_2\\.\\x_m\\ \end{bmatrix}\quad X=⎣⎢⎢⎡x1x2.xm⎦⎥⎥⎤
那么D上标签表示为列向量 y = ( y 1 , y 2 . . . y m ) ⊤ y=(y_1,y_2...y_m)^\top y=(y1,y2...ym)⊤
那么我们的目标是求的:
w = a r g m i n ( y − X w ) ⊤ ( y − X w ) w=\ \ arg\ \ min(y-Xw)^{\top}(y-Xw) w= arg min(y−Xw)⊤(y−Xw)
相比我们习惯的 y = w x + b y=wx+b y=wx+b这里是 X X X在左边~~
损失函数为 E = ( y − X w ) ⊤ ( y − X w ) E=(y-Xw)^\top(y-Xw) E=(y−Xw)⊤(y−Xw)
对 w w w求偏导得到:
∂ E w ∂ w = 2 X ⊤ ( X w − y ) \frac{\partial{E_{w}}}{\partial{w}}=2X^\top(Xw-y) ∂w∂Ew=2X⊤(Xw−y)
具体的推导过程参考这篇博客。
∂ E w ∂ w = 2 ∂ ( y − X w ) ⊤ ∂ w ( y − X w ) ( 1 ) \frac{\partial{E_{w}}}{\partial{w}}=2\frac{\partial{(y-Xw)^\top}}{\partial w}(y-Xw)\ \ \ \ \ \ \ \ (1) ∂w∂Ew=2∂w∂(y−Xw)⊤(y−Xw) (1)
因为 ∂ x ⊤ x ∂ y = ∂ x ⊤ ∂ y x + ∂ x ⊤ ∂ y x = 2 ∂ x ⊤ ∂ y x \frac{\partial x^\top x}{\partial y}=\frac{\partial x^\top}{\partial y}x+\frac{\partial x^\top}{\partial y}x=2\frac{\partial x^\top}{\partial y}x ∂y∂x⊤x=∂y∂x⊤x+∂y∂x⊤x=2∂y∂x⊤x
接着拆分 ∂ ( y − X w ) ⊤ \partial(y-Xw)^\top ∂(y−Xw)⊤因为和的转置等于转置的和,可以参考这个百度知道。
接着(1)式
∂ E ∂ w = 2 ∂ y ⊤ ∂ w ( y − X w ) − 2 ∂ ( X w ) ⊤ ∂ w ( y − X w ) ( 2 ) \frac{\partial E}{\partial w}=2\frac{\partial y^\top}{\partial w}(y-Xw)\ -2\frac{\partial (Xw)^\top}{\partial w}(y-Xw)\ \ \ \ \ (2) ∂w∂E=2∂w∂y⊤(y−Xw) −2∂w∂(Xw)⊤(y−Xw) (2)
那么很显然(2)式中第一项 y y y和 w w w无关即等于0。关于第二项,在参考的博客中有推导方式,这里这说结论就是有:
d ( X w ) ⊤ d w = X ⊤ \frac{d(Xw)^\top}{dw}=X^\top dwd(Xw)⊤=X⊤
所以(2)式的结果为:
∂ E ∂ w = 0 − 2 X ⊤ ( y − X w ) = X ⊤ ( X w − y ) \frac{\partial E}{\partial w}=0-2X^\top(y-Xw) \\ =X^\top(Xw-y) ∂w∂E=0−2X⊤(y−Xw)=X⊤(Xw−y)
对结果进行简单的移项、变形可以得到
w = ( X ⊤ X ) − 1 X ⊤ y w=(X^\top X)^{-1}X^\top y w=(X⊤X)−1X⊤y
那么最终学习得到的多元线性回归模型如下所示:
f ( x i ) = x i ( X ⊤ X ) − 1 X ⊤ y f(x_i)=x_i(X^\top X)^{-1}X^\top y f(xi)=xi(X⊤X)−1X⊤y
我认为广义的线性模型主要是做了非线性的映射,什么意思呢?就是说 y = w x + b y=wx+b y=wx+b外面还会经过一个非线性函数,类似感知机通过激活函数引入非线性的特征,那么在这里:
f ( x i ) = g − 1 ( w x + b ) f(x_i)=g^{-1}(wx+b) f(xi)=g−1(wx+b)其中g是一个单调可微的函数,参考西瓜书。