线性回归、加权线性回归及岭回归的原理和公式推导
目录:
- 前言
- 线性回归
- 加权线性回归
- 岭回归
- 总结
前言
机器学习相关的博文相信已经很多了,作为机器学习的一枚菜鸟,写这篇博文不在于标新立异,而在于分享学习,同时也是对自己研究生生涯的总结和归纳,好好地把研究生的尾巴收好。想着比起出去毕业旅行,在实验室总结一下自己的所学,所想,所感应该更有意义吧。(其实也想出去玩,但是老板要求再出一篇文章,那只好和毕业旅行拜拜了,所以趁机写个系列吧,反正后面的时间应该就是文章+博客的双重循环了,其实也是挺美的哈)
那么对于机器学习的相关内容,大家也似乎都是从线性回归开始讲起。同样的,我也从这个主题开始讲起,主要写自己平时的一些总结,可能里面会有一些错误或者理解有误的地方,也希望大家批评指出。其实,对于这个专题可能是机器学习里面最为基础的知识点了,也有很多相关的博文,但很多写得都不够的详细,而且缺乏推导过程,往往使人看起来有些晕晕的,可能也是自己的功力不够吧(ಥ_ಥ)。同时,这里个人推荐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 ( θ → ) 来实现对线性回归参数的求解,损失函数定义如下:
记住,在机器学习里面,向量的默认是列向量形式,所以上述的 T T 表示转置,因为我们写的时候写成了横向量的形式。同样在做向量乘积运算时,也应该对左边的向量加上转置,这样向量乘积才会得到一个值。
那么要最小化这个损失函数,我们可以采用随机梯度下降(Stochastic Gradient Descent)或者批梯度下降(Batch Gradient Descent),那么对参数向量
中的每一维参数求偏导,再根据学习率来进行参数地更新,具体如下:
那么,对于参数 θj θ j 的更新,批梯度下降算法如下所示:
Repeat until convergence{
θj=θj−η1m∑mi=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 )
}
}
关于上述两种梯度下降法的区别这里就不详细说明了,这不是本小节讨论的重点,大家可以查阅相关的博客或者书籍。(机器学习可是系统工程啊,要懂得方方面面,菜鸟到专家可得一步一个脚印呢)
上述是基于梯度来求解回归系数的,下面给出基于矩阵求解回归系数的办法,这里不需要多次迭代求解,对于训练数据量少时较为实用。首先,给出矩阵形式的损失函数: