首页 > 其他 > 详细

线性回归

时间:2014-04-02 08:02:15      阅读:521      评论:0      收藏:0      [点我收藏+]


Ng的一个例子:假设我们要用房子的大小来预测其价格,得到的数据如下:

bubuko.com,布布扣

我们画在二维平面上,得到如下:

bubuko.com,布布扣

我们可以大概地用一个函数来拟合如上的数据:

Price=h(area),其中h为线性函数,则称为线性回归,得到下面的一条预测直线。

bubuko.com,布布扣

 

一般化的,我们写成:

bubuko.com,布布扣

这里的参数,就是我们训练要得到的参数。

 

如何得到较好的参数呢?直观的方法就是最小二乘法(最小二乘的理论依据放在以后的blog),如下:

bubuko.com,布布扣

其中h表示我们模型得到的预测值,y为训练样本真实值,J为二乘差异。

 

那么问题转化为求解如上的最优化问题。

 

解法

常见的迭代法,如最速下降法等都可以求解上述问题。

首先求出负梯度方向:

bubuko.com,布布扣

根据下降算法,迭代更新系数直至收敛:

 bubuko.com,布布扣

不过由于是多参数问题,在具体更新计算的时候,根据不同的策略有不同的方法。

 

批梯度下降法 Batch gradient descent

这种每次遍历所有的训练样本,来更新一个系数。这种做法方差很大,容易造成局部收敛。

 bubuko.com,布布扣

Matlab实现

用matlab来拟合函数Y=3X+2+noise。

 用批梯度下降法求解,代码如下:

clear;
clc;
X=random(‘norm‘,1,20,[1,100]);
noise=random(‘norm‘,0,1,[1,100]);
Y=3*X+2+noise;
plot(X,Y,‘*‘);
sita=zeros(1,2);
maxiter=200000;
a=0.000001;
min_J=0.001;
for iter=1:maxiter
    for j=1:2
        for i=1:100
            sita(j)=sita(j)+a*(Y(i)-sita(1)*X(i)-sita(2))*X(i);
        end
    end
    J=0;
    for i=1:100
        J=J+0.5*(sita(1)*X(i)+sita(2)-Y(i))^2;
    end
    if(J<min_J)
        break;
    end
end
sita(1)
sita(2)
x=-50:50;
y=sita(1)*x+sita(2);
plot(x,y);

最后的结果为:

Sita(1)=

  3.0003

Sita(2)=

  2.2875

得到近似直线Y=3.0003X+2.2875;

拟合效果:

bubuko.com,布布扣

 

 

随机梯度下降法 stochastic gradient descent

也叫做增量下降法 Incremental gradient descent

不同于匹梯度下降法,随机梯度下降每次只取目标函数关于当前样本的部分,实现目标函数的分布最优化,主要步骤如下:

bubuko.com,布布扣

如上,每次用一个样本,更新所有系数。而批梯度则是每次用所有样本更新一个系数。

同样拟合Y=3*X+2+noise

matlab实现

clear;
clc;
X=random(‘norm‘,1,20,[1,100]);
noise=random(‘norm‘,0,10,[1,100]);
Y=3*X+2+noise;
plot(X,Y,‘*‘);
hold on;
sita=zeros(1,2);
maxiter=200000;
a=0.000001;
min_J=0.001;
for iter=1:maxiter
    for i=1:100
        for j=1:2
            sita(j)=sita(j)+a*(Y(i)-sita(1)*X(i)-sita(2))*X(i);
        end
    end
    J=0;
    for i=1:100
        J=J+0.5*(sita(1)*X(i)+sita(2)-Y(i))^2;
    end
    if(J<min_J)
        break;
    end
end
sita(1)
sita(2)
x=-50:50;
y=sita(1)*x+sita(2);
plot(x,y);

结果为:

Sita(1) =

3.0186

Sita(2) =

3.0167

得到近似直线:Y=3.0186X+3.0167

bubuko.com,布布扣


对比

当样本数m很大时,随机梯度法不用更新完所有的样本就能达到一个较好的参数拟合效果,虽然随机下降法是不收敛的,在最优值附近不断震荡,不过在实践中,是更好的方法。

 

解析法

把所有的样本组合得到一个矩阵,利用矩阵求导等方法,得到解析解,如下:

bubuko.com,布布扣

具体求解及证明略。

线性回归,布布扣,bubuko.com

线性回归

原文:http://blog.csdn.net/ice110956/article/details/22756123

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!