码迷,mamicode.com
首页 > 其他好文 > 详细

理解线性回归

时间:2018-03-11 17:19:58      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:数理统计   状态   logs   距离   求导   col   多次   绝对值   差值   

      线性回归是利用数理统计回归分析,来确定变量之间的依赖关系的统计分析方法。如何理解呢,其实就是要寻找数据规律,以便根据数据规律,对新的变量条件进行结果推断。放到数学中来,就是把这个规律看成一个函数,要想办法求解出这个函数的各个参数。可以想像解方程,只不过这里要找的不是方程中的x、y、z,而是寻找合适的系数。

技术分享图片

      上图中有许多的二维数据点,通过观察发现这些点貌似是有一些规律的,通过描绘蓝色直线可以很直接的观察到,这些数据点围绕在这条直线的周围,并沿着直线的方向进行延伸。这条直线其实就是我们要找的规律。那这条直接怎么样来找呢?找到的直线是不是最好的呢?如果这些点到直线的距离之和如果最小,那这条直接应该就是我们期望的直线(这是svm的思路,寻找一个分割面,能让所有点到分割面距离和最小),但这里我们换一种思路,如果所有数据点的y值与x落在直线上的y值的差值距离的和最小,这条直线也应该是我们期望的。

      假设这条直线的函数为 f(x) = y = a * x + b , 其中a和b就是我们要寻找到系数,x和y分别是数据点的横坐标值和纵坐标值。假设这里有n个数据点,第k个点的y值就是yk,上面描述的最小距离和就可以表示为 |f(xk) - yk|,也可以直接用(f(xk) - yk)2替代(L2),这样不用考虑绝对值的正负区间情况。那么现在就是要找一个合适的a和b,让所有点的(f(xk) - yk)2的和最小。需要注意的是,这里的x和y都是已经知道的数据点,而系数是未知数据。我们为所有点的(f(xk) - yk)2的和命名为J函数,它的未知变量其实就是a、b,最后表示为J(a,b),在多维的情况下可以用一个向量θ表示所有的参数,写成J(θ)。


技术分享图片


技术分享图片

      现在就是想办法求这个系数的函数的最小值,我们能想像J会是一个有谷底的图形,而谷底就是斜度接近或者是0的地方(不能排除有的时候会有多个谷底,你只找到了一个其中一个,但不是最底的那个,就所谓局部最优和全局最优的区别)。

技术分享图片

      斜度的计算可以对J(a,b)进行求导,为方便可以对a和b两个维度分别进行偏导,也就是分别看a和b维度的斜度。可以想像自己站在谷顶某处,要下到谷底,可以向左下一段,再向右下一段,再交替着一直走下山。

 

技术分享图片
      对求导不熟悉的可以参考上图,就是在某a点求J(a)的极限,也就是微增量ΔJ / 微增量Δa。 我们省略了求导后得到的系数2,这不影响找最小值。
技术分享图片

技术分享图片

       这里其实理论上可以命J’函数为0,带入各数据点来求解a、b,但实际处理时数据噪音以及量级和维度的量级,不方便求解。这里就可以用梯度下降算法了,这里我们将用随机梯度下降方法,在一组简单的数据上,手工进行下降的训练。梯度下降是一种小步逐步逼近最低点的方法,一开始先随机选一个a作为起点,然后选定一个合适的步进量α,用α * J(a)’作为a方向上一次移动的长度,那到底是向左还是向右移动呢?通过观察,如果是在最低点的右侧,斜度是正值,我们要逼近最低点,应该是向左走;如果是在最低点的左侧,斜度是负值,则要向右走,所以应该用a - α * J(a)’,这样就可以向最低点方向走了。α的值一定要选的合适,太小会让逼近的过程太久,太大会出现老是走过了的情况。最后得到了以下公式。b维度的也是类似的。再接下来就可以将数据点的x、y值带入到公式,循环执行,直到a、b都收缩到趋于稳定的状态,也就是α * J(a)’和α * J(b)’已经小于设定的阈值。

 


技术分享图片


技术分享图片  

 

      这里我们来一些数据,假设我们有这么一组x、y的数据,y有一些是未知的值,我们需要推测它们是什么值。从已知的值我们很容易知道y = 2x - 1,现在就用随机梯度进行a、b的寻找。

 

技术分享图片
      随机梯度下降不需要每次用全量的数据,每次随机取一个或一部分进行训练,可以减少运算快速达到结果。因为每次只取一个数据点,所以上面的函数不再需要求和,a、b的推导可以简化为以下式子。

技术分享图片

技术分享图片
      如果每次都先计算好了a,计算b的时候可以把当次的a代入来使用,则b的推导变成:

技术分享图片
      假设a初始值为1、b初始值为0,(这里的初始值可以随机选取),设定步进量为0.01,然后依次或随机选取一对x、y的值带入到上面的at+1和bt+1中计算a和b的值,这里需要重复很多次,你会发现a、b的值有时候会出现反复,但大的趋势上来看,是在逐步的靠近a=2、b=-1。以上过程可以直接用excel来进行,会写程序的可以设置循环次数或者判断α * J’的大小,当小于阈值时退出。
附上excel文件 随机梯度excel

      以上有误之处,欢迎斧正。 

理解线性回归

标签:数理统计   状态   logs   距离   求导   col   多次   绝对值   差值   

原文地址:https://www.cnblogs.com/heros/p/linear_regression.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!