机器学习(1)------ 线性回归、加权线性回归及岭回归的原理和公式推导

线性回归、加权线性回归及岭回归的原理和公式推导

目录:
- 前言
- 线性回归
- 加权线性回归
- 岭回归
- 总结


前言

机器学习相关的博文相信已经很多了,作为机器学习的一枚菜鸟,写这篇博文不在于标新立异,而在于分享学习,同时也是对自己研究生生涯的总结和归纳,好好地把研究生的尾巴收好。想着比起出去毕业旅行,在实验室总结一下自己的所学,所想,所感应该更有意义吧。(其实也想出去玩,但是老板要求再出一篇文章,那只好和毕业旅行拜拜了,所以趁机写个系列吧,反正后面的时间应该就是文章+博客的双重循环了,其实也是挺美的哈)

那么对于机器学习的相关内容,大家也似乎都是从线性回归开始讲起。同样的,我也从这个主题开始讲起,主要写自己平时的一些总结,可能里面会有一些错误或者理解有误的地方,也希望大家批评指出。其实,对于这个专题可能是机器学习里面最为基础的知识点了,也有很多相关的博文,但很多写得都不够的详细,而且缺乏推导过程,往往使人看起来有些晕晕的,可能也是自己的功力不够吧(ಥ_ಥ)。同时,这里个人推荐Andrew Ng的课件作为这部分内容的参考,为保持统一,相关公式的符号来自该课件。但我写这篇博客的目的是,你只看我的博客也能很清楚的弄懂线性回归、加权线性回归以及岭回归的概念。

学习机器学习的小心得:脑袋中一定要有矩阵、向量的概念,这一点非常重要,因为我们现在处理的数据是多维的数据,所以可能无法非常直观的来表述我们的数据,所以大脑中一定要有这样的概念。然后就是Coding再Coding,这一点自己也没做好啦,惭愧。

线性回归

回归的目的就是对给定的数据预测出正确的目标值,分类的目的是对给定的数据预测出正确的类标,要注意区分这两个概念,其实我在刚接触机器学习的时候经常把这两个概念弄混。那么,对于线性回归,就是实现对给定数据目标值的预测过程。

那么对于给定的训练数据 X=[x⃗ 1,x⃗ 2,,x⃗ m]T X = [ x → 1 , x → 2 , … , x → m ] T ,其中 x⃗ i={xi1,xi2,xi3,,xin}T x → i = { x i 1 , x i 2 , x i 3 , … , x i n } T 。对应的,这些训练数据的目标值是 y⃗ ={y1,y2,y3,,ym} y → = { y 1 , y 2 , y 3 , … , y m } 。一般的,我们通过所给定的训练数据及对应的目标值来求解线性回归的参数 θ⃗ ={θ1,θ2,θ3,,θn}T θ → = { θ 1 , θ 2 , θ 3 , … , θ n } T 。具体的,我们通过定义损失函数 Jx⃗ i(θ⃗ ) J x → i ( θ → ) 来实现对线性回归参数的求解,损失函数定义如下:

Jx⃗ i(θ⃗ )=12(x⃗ Tiθyi)2(1) (1) J x → i ( θ → ) = 1 2 ( x → i T θ − y i ) 2

记住,在机器学习里面,向量的默认是列向量形式,所以上述的 T T 表示转置,因为我们写的时候写成了横向量的形式。同样在做向量乘积运算时,也应该对左边的向量加上转置,这样向量乘积才会得到一个值。

那么要最小化这个损失函数,我们可以采用随机梯度下降(Stochastic Gradient Descent)或者批梯度下降(Batch Gradient Descent),那么对参数向量 θ⃗  θ → 中的每一维参数求偏导,再根据学习率来进行参数地更新,具体如下:

Jx⃗ i(θ⃗ )θj=2×12×(x⃗ Tiθyi)×xij=(x⃗ Tiθyi)×xij(2) (2) ∂ J x → i ( θ → ) ∂ θ j = 2 × 1 2 × ( x → i T θ − y i ) × x i j = ( x → i T θ − y i ) × x i j

那么,对于参数 θj θ j 的更新,批梯度下降算法如下所示:
Repeat until convergence{
          θj=θjη1mmi=1((x⃗ Tiθyi)×xij)                     θ j = θ j − η 1 m ∑ i = 1 m ( ( x → i T θ − y i ) × x i j ) (for every θj θ j
}
其中, η η 表示学习率。而对于随机梯度下降,算法如下所示:
for i = 1 to m{
                   for j = 1 to n{
            θj=θjη((x⃗ Tiθyi)×xij)                         θ j = θ j − η ( ( x → i T θ − y i ) × x i j )
                   }
}
关于上述两种梯度下降法的区别这里就不详细说明了,这不是本小节讨论的重点,大家可以查阅相关的博客或者书籍。(机器学习可是系统工程啊,要懂得方方面面,菜鸟到专家可得一步一个脚印呢)

上述是基于梯度来求解回归系数的,下面给出基于矩阵求解回归系数的办法,这里不需要多次迭代求解,对于训练数据量少时较为实用。首先,给出矩阵形式的损失函数:

J(θ⃗ )=12(Xθ⃗ y⃗ )T(Xθ⃗ y⃗ )=12(θ⃗ TXTXθ⃗ θ⃗ TXTy⃗ y⃗ TXθ⃗ +y⃗ Ty⃗ )=12tr(θ⃗ TXTXθ⃗ θ⃗ TXTy⃗ y⃗ TXθ⃗ +y⃗ Ty⃗ )=12(tr(θ⃗ TXTXθ⃗ )2tr(y⃗ TXθ⃗ )+y⃗ Ty⃗ ) J ( θ → ) = 1 2 ( X θ → − y → ) T ( X θ → − y → ) = 1 2 ( θ → T X T X θ → − θ → T X T y → − y → T X θ → + y → T y → ) = 1 2 t r ( θ → T X T X θ → − θ → T X T y → − y → T X θ → + y → T y → ) = 1 2 ( t r ( θ → T X T X θ → ) − 2 t r ( y → T X θ → ) + y → T y → )

其中, tr t r 表示矩阵的Trace operator,暂时不知道如何翻译。但应该读过Andrew Ng的课件的同学对这个应该有影响,可以去看看原稿的解释哦。这里可以使用 tr t r 的原因是 tr(E)=E t r ( E ) = E ,其中 E E 表示常数。(自行理解哦)

下一步,我们需要使用参数向量 θ⃗  θ → 进行矩阵求导,暂且这里把向量看成矩阵吧,其实向量就是矩阵,特殊一点就是啦。可能公式上写得有点不符合规范,但是为保持前后统一,这里还是暂且将 θ θ 写成向量的形式。那么矩阵求导的公式有:

θ⃗ J(θ⃗ )=12θ⃗ (tr(θ⃗ TXTXθ⃗ )2tr(y⃗ TXθ⃗ )+y⃗ Ty⃗ )=12(XTXθ⃗ +XTXθ⃗ 2XTy⃗ )=XTXθ⃗ XTy⃗ =0 ∇ θ → J ( θ → ) = 1 2 ∇ θ → ( t r ( θ → T X T X θ → ) − 2 t r ( y → T X θ → ) + y → T y → ) = 1 2 ( X T X θ → + X T X θ → − 2 X T y → ) = X T X θ → − X T y → = 0

其中,有两个重点的公式: Atr(AB)=BT ∇ A t r ( A B ) = B T ATtr(ABATC)=BTATCT+BATC ∇ A T t r ( A B A T C ) = B T A T C T + B A T C 。那么,根据上述的公式,最后求解得到:
θ⃗ =(XTX)1XTy⃗  θ → = ( X T X ) − 1 X T y →

这样就完成了对回归参数的求解。线性回归部分地介绍到此介绍,我们这里给出了两种求解线性回归参数的方法。

加权线性回归

加权线性回归的思想在于我们希望使用离待拟合数据较近的那些样本来描述待拟合数据。这与我们平时的认知是一致的,即我们向其他人描述他们未知的事物时,我们往往喜欢使用与该事物相近的事物来进行描述,其实加权线性回归也是基于这么一个思想。

所以对于待拟合数据 x⃗ k={xk1,xk2,xk3,,xk4} x → k = { x k 1 , x k 2 , x k 3 , … , x k 4 } ,我们需要通过给定的训练数据 X=[x⃗ 1,x⃗ 2,,x⃗ m]T X = [ x → 1 , x → 2 , … , x → m ] T 来进行拟合,其中 x⃗ i={xi1,xi2,xi3,,xin}T x → i = { x i 1 , x i 2 , x i 3 , … , x i n } T 。对应的,这些训练数据的目标值是 y⃗ ={y1,y2,y3,,ym} y → = { y 1 , y 2 , y 3 , … , y m } 。首先,我们需要计算待拟合数据和每个训练数据之间的距离权重,定义如下:

w(x⃗ k,x⃗ i)=exp|x⃗ kx⃗ i|2k2 w ( x → k , x → i ) = e x p ⟮ | x → k − x → i | − 2 k 2 ⟯

其中, k k 作为关键性的参数用于调整拟合待拟合数据的样本量。 k k 越大,表明我们将使用更多的数据样本来拟合待拟合数据。同时,为简便距离权重的表示,我们将 w(x⃗ k,x⃗ i) w ( x → k , x → i ) 写成 wki w k i 的形式。那么,此时的损失函数 J(θ⃗ ) J ( θ → ) 写作:
Jx⃗ i(θ⃗ )=12wik(x⃗ Tiθ⃗ yi)2 J x → i ( θ → ) = 1 2 w i k ( x → i T θ → − y i ) 2

可以看到,相较于线性回归的损失函数,加权线性回归增加了权重参数。同样的,我们通过对参数向量 θ⃗  θ → 中每一维的数据求偏导,来进行参数的迭代更新,定义如下:
Jx⃗ i(θ⃗ )θj=12×2×wik×(x⃗ Tiθ⃗ yi)×xij=wik(x⃗ Tiθ⃗ yi)×xij ∂ J x → i ( θ → ) ∂ θ j = 1 2 × 2 × w i k × ( x → i T θ → − y i ) × x i j = w i k ( x → i T θ → − y i ) × x i j

那么,对于参数 θj θ j 的更新,批梯度下降算法如下所示:
Repeat until convergence{
          θj=θjη1mmi=1(wik(x⃗ Tiθyi)×xij)                     θ j = θ j − η 1 m ∑ i = 1 m ( w i k ( x → i T θ − y i ) × x i j ) (for every θj θ j
}
其中, η η 表示学习率。而对于随机梯度下降,算法如下所示:
for i = 1 to m{
                   for j = 1 to n{
            θj=θjη(wik(x⃗ Tiθyi)×xij)                         θ j = θ j − η ( w i k ( x → i T θ − y i ) × x i j )
                   }
}
可以看到,距离待拟合点越远的数据点,对回归参数的作用将越小。所以,对于加权线性回归需要对每一个待拟合的数据计算回归参数,所以相较于加权线性回归其拟合的效果会有所提升。但也容易出现过拟合的现象。

那么对于矩阵形式的加权线性回归的公式求解,具体如下:

J(θ⃗ )=12(Xθ⃗ y⃗ )TW(Xθ⃗ y⃗ )=12(θ⃗ TXTWXθ⃗ θ⃗ TXTy⃗ y⃗ TWXθ⃗ +y⃗ Ty⃗ )=12tr(θ⃗ TXTWXθ⃗ θ⃗ TXTWy⃗ y⃗ TWXθ⃗ +y⃗ Ty⃗ )=12(tr(θ⃗ TXTWXθ⃗ )2tr(y⃗ TWXθ⃗ )+y⃗ Ty⃗ )) J ( θ → ) = 1 2 ( X θ → − y → ) T W ( X θ → − y → ) = 1 2 ( θ → T X T W X θ → − θ → T X T y → − y → T W X θ → + y → T y → ) = 1 2 t r ( θ → T X T W X θ → − θ → T X T W y → − y → T W X θ → + y → T y → ) = 1 2 ( t r ( θ → T X T W X θ → ) − 2 t r ( y → T W X θ → ) + y → T y → ) )

其中 WRm×m W ∈ R m × m 是距离权重对角矩阵,有:
W=wk10.00wk20000.wkm W = [ w k 1 0 … 0 0 w k 2 … 0 . 0 … . 0 0 … w k m ]

那么,下一步就是对矩阵求 θ⃗  θ → 的偏导,公式如下:
θ⃗ J(θ⃗ )=12θ⃗ (tr(θ⃗ TXTWXθ⃗ )2tr(y⃗ TWXθ⃗ )+y⃗ Ty⃗ ))=12(XTWXθ⃗ +XTWXθ⃗ 2(XTWy⃗ ))=XTWXθ⃗ XTWy⃗ =0 ∇ θ → J ( θ → ) = 1 2 ∇ θ → ( t r ( θ → T X T W X θ → ) − 2 t r ( y → T W X θ → ) + y → T y → ) ) = 1 2 ( X T W X θ → + X T W X θ → − 2 ( X T W y → ) ) = X T W X θ → − X T W y → = 0

那么最终求解得 θ⃗ =(XTWX)1XTWy⃗  θ → = ( X T W X ) − 1 X T W y → 。这就是使用矩阵求解的形式来计算加权线性回归的回归系数。记住一点,加权线性回归要对每一个待回归的数据求解回归系数。所以,这里我们首先要计算待回归点和训练数据样本点的距离权重对角矩阵 W W

岭回归

岭回归主要用于处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。对于线性回归来讲,通过引入惩罚项 nj=1θ2j ∑ j = 1 n θ j 2 来减少不重要的参数,这在统计学里面成为缩减(shrinkage)。

具体的,此时的损失函数定义为:

J(θ⃗ )=12((x⃗ Tiθ⃗ yi)2+λj=1nθ2j) J ( θ → ) = 1 2 ( ( x → i T θ → − y i ) 2 + λ ∑ j = 1 n θ j 2 )

类似的,对该损失函数求参数向量 θ⃗  θ → 中每个参数的偏导,然后使用批梯度下降和随机梯度下降进行参数更新,公式定义如下:
x⃗ iJ(θ⃗ )θj=12×2×(x⃗ Tiθ⃗ yi)xij+12×2×λ×θj=(x⃗ Tiθ⃗ yi)xij+λ×θj ∂ x → i J ( θ → ) ∂ θ j = 1 2 × 2 × ( x → i T θ → − y i ) x i j + 1 2 × 2 × λ × θ j = ( x → i T θ → − y i ) x i j + λ × θ j

那么,对于参数 θj θ j 的更新,批梯度下降算法如下所示:
Repeat until convergence{
          θj=θjη1mmi=1((x⃗ Tiθ⃗ yi)xij+λ×θj)                     θ j = θ j − η 1 m ∑ i = 1 m ( ( x → i T θ → − y i ) x i j + λ × θ j ) (for every θj θ j
}
其中, η η 表示学习率。而对于随机梯度下降,算法如下所示:
for i = 1 to m{
                   for j = 1 to n{
            θj=θjη((x⃗ Tiθ⃗ yi)xij+λ×θj)                         θ j = θ j − η ( ( x → i T θ → − y i ) x i j + λ × θ j )
                   }
}

下面对这部分内容写成矩阵的形式进行求解,公式如下:

J(θ⃗ )=12[(Xθ⃗ y⃗ )T(Xθ⃗ y⃗ )+λθ⃗ TIθ⃗ ]=12(θ⃗ TXTWXθ⃗ θ⃗ TXTy⃗ y⃗ TWXθ⃗ +y⃗ Ty⃗ +λθ⃗ TIθ⃗ )=12tr(θ⃗ TXTWXθ⃗ θ⃗ TXTy⃗ y⃗ TWXθ⃗ +y⃗ Ty⃗ +λθ⃗ TIθ⃗ )=12(tr(θ⃗ TXTWXθ⃗ )2tr(y⃗ TWXθ⃗ )+y⃗ Ty⃗ +λtr(θ⃗ TIθ⃗ )) J ( θ → ) = 1 2 [ ( X θ → − y → ) T ( X θ → − y → ) + λ θ → T I θ → ] = 1 2 ( θ → T X T W X θ → − θ → T X T y → − y → T W X θ → + y → T y → + λ θ → T I θ → ) = 1 2 t r ( θ → T X T W X θ → − θ → T X T y → − y → T W X θ → + y → T y → + λ θ → T I θ → ) = 1 2 ( t r ( θ → T X T W X θ → ) − 2 t r ( y → T W X θ → ) + y → T y → + λ t r ( θ → T I θ → ) )

其中, I I 为对角矩阵。所以求解矩阵对 θ⃗  θ → 的矩阵导数有:
θ⃗ J(θ⃗ )=12θ⃗ (tr(θ⃗ TXTWXθ⃗ )2tr(y⃗ TWXθ⃗ )+y⃗ Ty⃗ +λtr(θ⃗ TIθ⃗ ))=12(XTXθ⃗ +XTXθ⃗ 2XTy⃗ +λ(2Iθ⃗ ))=XTXθ⃗ XTy⃗ +λ(Iθ⃗ )=0 ∇ θ → J ( θ → ) = 1 2 ∇ θ → ( t r ( θ → T X T W X θ → ) − 2 t r ( y → T W X θ → ) + y → T y → + λ t r ( θ → T I θ → ) ) = 1 2 ( X T X θ → + X T X θ → − 2 X T y → + λ ( 2 I θ → ) ) = X T X θ → − X T y → + λ ( I θ → ) = 0

那么最总求得 θ⃗ =(XTX+λI)1XTy⃗  θ → = ( X T X + λ I ) − 1 X T y → 。那么这就是岭回归矩阵形式的求解过程。

总结

这里稍微再最后总结一下,本篇博文主要是对线性回归、加权线性回归以及岭回归这几类回归进行了梳理和公式地推导。这里主要是公式的推导,即对这三类回归,我们给出了向量形式和矩阵形式的两种推导模式,大家可以参考着看。这篇博文需要大家耐下心来慢慢的看推导的过程,然后自己推导一遍,其实你也就差不多掌握这几类回归了。

你可能感兴趣的:(Machine,Learning)