线性回归 Linear regression(1)线性回归的基本算法与求解
本系列内容大部分来自Standford公开课machine learning中Andrew老师的讲解,附加自己的一些理解,编程实现和学习笔记。
第一章 Linear regression
1.线性回归
线性回归是一种监督学习的方法。
线性回归的主要想法是给出一系列数据,假设数据的拟合线性表达式为:
如何求得参数θ成为这个方法唯一的问题,为此我们需要定义损失函数:
,其中m表示样本个数,表示第i组样本,所以J表示总的m个样本的损失函数。
这个损失函数的表达式我们一定很熟悉,方差?最小二乘法?没错,这就是我们最原始的最小二乘模型。我们的任务就是让损失函数J尽可能的小。
P.S:至于为什么要选择J作为我们的损失函数,从表面上看很自然,当然选择这个函数也有概率解释,概率解释会放在之后的文章中讨论。
2.LMS最小均方算法
我们现在要做的任务就是选择参数θ,使得损失函数J尽可能小,很自然我们会想到梯度下降的方法。
梯度下降的思想最形象的解释就是:你站在山顶,环顾四周,寻找一个下山最快的方向走一小步,然后再次环顾四周寻找一个下山最快的方向走一小步,在多次迭代之后就会走到最低点。
放在这里也就要求我们先选择一个初始的然后利用梯度下降进行迭代,其中α表示学习的步长。
对于单个样本来说最后迭代公式为,这就是我们熟知的Widrow-Hoff规则。
我们可以来分析一下这个迭代公式,的更新取决于真实值与拟合值的误差,从直观上我们就很能理解梯度下降和Widrow-Hoff规则了。
有了这个规则,我们就可以设计相应的算法,使得J取到最小值了。
方法一:批量梯度下降
意思很简单,每次迭代都迭代所有的m个已知样本,直到收敛。
Repeat until convergence{
(for every j)
}
方法二:随机梯度下降
批量梯度下降其实存在一个比较大的问题,当数据组数m特别大的时候,我们迭代一次就需要很长的时间。使用随机梯度下降虽然有可能走一些“弯路”,但因为每次迭代只使用一组数据所以相比较而言,反而能更快的收敛。
Loop{
for i=1 to m{
if convergence;
}
}
其实在梯度下降算法中,还有一个问题,学习率如何控制,AndrewNg并没有太多的介绍,但是其实对于学习率α的控制相当重要,如果α略大就会导致最后无法收敛。我会针对自己做的demo再写一篇博客讨论学习率控制的问题。
3.如何直接求出θ
其实我们是能利用矩阵运算直接求出参数θ,不过需要一些矩阵计算,可能会重新开一篇文章来计算这个θ。
这里就直接给出答案
最新文章
- MySql binlog恢复数据
- 用简单直白的方式讲解A星寻路算法原理
- C语言 稀疏矩阵 压缩 实现
- Linux ps同时查找多个进程
- failed to obtain a cell from its dataSource
- Solr4.8.0源码分析(12)之Lucene的索引文件(5)
- (转载)图片左右滚动控件(带倒影)——重写Gallery
- python GUI学习——Tkinter
- Android View动画效果—透明效果,旋转效果(二)
- linux安装mysql数据库
- 好用的jquery.animateNumber.js数字动画插件
- weblogic 安装部署详解
- Unity3D 4.x编辑器操作技巧
- 【第一部分】04Leetcode刷题
- linux下添加逻辑分区并挂载(手动和自动方式)
- 解决eclipse中Tomcat服务器的server location选项不能修改的问题
- libgdx学习记录12——圆角矩形CircleRect
- poj1976
- Palindromic Tree 回文自动机-回文树 例题+讲解
- bzoj4552: [Tjoi2016&;Heoi2016]排序(二分+线段树)
热门文章
- 拓扑排序 - hdu 1285(普通和优先队列优化)
- G - 锘爷考驾照
- Python学习札记(十二) Function3 函数参数一
- RabbitMQ入门(6)——远程过程调用(RPC)
- 06_zookeeper_原生API使用2
- byte[]与各种数据类型互相转换示例
- 使用Netty做WebSocket服务端
- MySQL的登陆错误:ERROR 1049 (42000): Unknown database 'root'
- IOS-Quartz2D
- 如何让history显示时间