您的位置:首页 > 其它

新宇教你机器学习之 Linear Regression (Least Square Regression)

2015-05-13 13:49 267 查看
http://blog.sina.com.cn/s/blog_a18c98e50101108a.html

部分资料和内容摘自斯坦福大学Andrew Ng教授的Machine Learning Online Class。

监督学习(supervised learning)通常有下列步骤:





首先通过某种学习算法训练已有的数据,得到function h。H叫做hypothesis。给定x值,它可以预测对应的y值。举个例子,x可以是住房的面积,y是房子的价格。当你给h输入任意一个面积值,他就可以预测出这个房子价值多少钱。

当输出Y的值是连续性的时候,这个问题叫做regression。

当输出Y的值是离散性的时候,这个问题叫做classification。

上面的例子大致符合线性的关系(房子价格大致和面积成线性关系)。

Linear Regression就是一种可以解决如上问题的监督学习算法。

假设有如下数据,x轴是房子面积,y轴是房子价格。假设我们用Least square的方法,实际上就是求一条直线,它可以让每个点数据到直线距离的平方的和最小。





如果是上面的例子,x 是一维的(房子面积),那么H可以写成:





如果房子价格不仅仅依据房子面积,同时也依据房子的房间数,那么H可以被写成:





如果假设x0等于 1,那么这个式子就可以写成:





H(x)是预测的值,y是真实的值,我们就是要找到一个Ө,使两者差的平方最小。

写成公式的话,Cost Function可以定义成:





我们的目标就是计算出一个Ө值,使J最小。

下列方法可以解决这个问题:

Gradient Descent:

这个算法理解起来很简单,首先初始化一个Ө值。之后望向四面八方,看那条路可以接近正确的值就向那个方向迈一步。更新Ө值,再重复上面过程,直到J的值不怎么变化为止。数学表达为:





当然上述算法有可能得到的只是local minimum。所以重复几次上面的过程,用不同的初始值,如果得到相同的结果,那么就可以认为当前的Ө值可以让J最小。

Stochastic Gradient Descent (Incremental gradient descent)

前面的方法,需要处理完所有的训练数据之后才会每次更新一次Ө,如果训练数据很多的话,就会变得很慢。Stochastic
Gradient Descent每处理完一个训练数据,就会立即更新Ө。在某种程度上,这可以提高程序的效率。

The Normal Equation

这种方法不需要经过任何循环,也不需要假设初始值。虽然推导本身有点复杂,但是结果一步到位,简单又效率。非常牛逼的方法啊。

我刚看完这个推导之后,不得不佩服那些数学家,居然可以如此简单的算出上述需要循环才能得到的复杂的结果。唉,感叹一下数学之美。

准备工作:

定义function f(A):Mapping
from M-by-n matrices to the real numbers。

定义f(A)的微分为:





定义trace operator。对于一个n
by n的matrix A, the
trace of A is:





Trace有如下特性:

如果a是一个real number, 那么tr
a = a









矩阵微分有如下特性:





开始推导:

首先,设计一个m行n列的(实际上是n+1列,应为我们假设x0
=1 )矩阵X,他的每一行都是一个training sample,每列都是一个特征。





设计y成为一个m列的目标值(输出值)向量,也就是房子的价格在我们例子中。





因为:





所以:





因为对于一个向量z来说:




所以:





最后我们用之前提到的矩阵微分特性的第二和第三条:





所以:





因为我们要让J最小,所以J的微分必须等于0。

所以:





这就是最后的结果了。非常简单明了也很容易实现出来。

需要注意的是,当你实现的时候,记得把数据X最右边加上全部是“1”的一列,因为我们前面的时候假设

X0 = 1。

下图是Matlab的结果:





"x"是原始数据,蓝线是用Matlab的polyfit()方法算出来的linear regression。红圈就是用normal method计算出来的预测值,可以看到他们全部都完美的对齐在蓝线上。

不记得在哪里看到的了,有人说,当数据量过大的时候normal equation method会变得不稳定。QR Factorization是一种更好的方法。我还没研究过,以后懂了再更新吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐