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

来源:互联网 发布:哪些明星开了淘宝店铺 编辑:程序博客网 时间:2024/06/05 06:36

http://blog.sina.com.cn/s/blog_a18c98e50101108a.html

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


Gradient Descent

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

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

当然上述算法有可能得到的只是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)的微分为:

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

 

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

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

Trace有如下特性:

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

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

矩阵微分有如下特性:


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

开始推导:

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

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

 

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

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

因为:

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

所以:

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

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

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)
所以:
新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)


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


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

所以:

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

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

所以:

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

 

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

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

X0 = 1。

下图是Matlab的结果:

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

 

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


不记得在哪里看到的了,有人说,当数据量过大的时候normal equation method会变得不稳定。QR Factorization是一种更好的方法。我还没研究过,以后懂了再更新吧。

0 0
原创粉丝点击