MyException - 我的异常网
当前位置:我的异常网» 行业应用 » 了解线性回归

了解线性回归

www.MyException.Cn  网友分享于:2018-03-30  浏览:1次
理解线性回归

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

201803101418.jpg

上图中有许多的二维数据点,通过观察发现这些点貌似是有一些规律的,通过描绘蓝色直线可以很直接的观察到,这些数据点围绕在这条直线的周围,并沿着直线的方向进行延伸。这条直线其实就是我们要找的规律。那这条直接怎么样来找呢?找到的直线是不是最好的呢?如果这些点到直线的距离之和如果最小,那这条直接应该就是我们期望的直线(这是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(θ)。


201803102206.jpg


201803102221.jpg

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

201803102248.jpg

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

 

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

201803102258.jpg

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

 


201803111133.jpg


201803111133.jpg  

 

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

 

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

201803111140.jpg

201803111141.jpg
如果每次都先计算好了a,计算b的时候可以把当次的a代入来使用,则b的推导变成:

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

文章评论

程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员必看的十大电影
程序员必看的十大电影
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
每天工作4小时的程序员
每天工作4小时的程序员
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
编程语言是女人
编程语言是女人
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个调试和排错的小建议
10个调试和排错的小建议
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员都该阅读的书
程序员都该阅读的书
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
那些争议最大的编程观点
那些争议最大的编程观点
程序员的鄙视链
程序员的鄙视链
 程序员的样子
程序员的样子
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员和编码员之间的区别
程序员和编码员之间的区别
总结2014中国互联网十大段子
总结2014中国互联网十大段子
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
我是如何打败拖延症的
我是如何打败拖延症的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
代码女神横空出世
代码女神横空出世
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
漫画:程序员的工作
漫画:程序员的工作
Java程序员必看电影
Java程序员必看电影
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
旅行,写作,编程
旅行,写作,编程
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有