线性回归


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

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


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

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

 

一般化的,我们写成:


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

 

如何得到较好的参数呢?直观的方法就是最小二乘法(最小二乘的理论依据放在以后的blog:http://blog.csdn.net/ice110956/article/details/22782717 ),如下:


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

 

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

 

解法

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

首先求出负梯度方向:


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

 

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

 

批梯度下降法 Batch gradient descent

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

 

Matlab实现

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

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

clear;
clc;
X=random('norm',1,20,[1,100]);
noise=random('norm',0,5,[1,100]);
Y=3*X+2+noise;
plot(X,Y,'*');
sita=zeros(1,2);
maxiter=200;
a=0.001;
min_J=0.001;
for iter=1:maxiter
    for i=1:100
            sita(1)=sita(1)+a*(Y(i)-sita(1)*X(i)-sita(2))*X(i);
     end
     for i=1:100
            sita(2)=sita(2)+a*(Y(i)-sita(1)*X(i)-sita(2));
     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) =
2.9598
sita(2)=
2.4461

得到近似直线Y=2.9598X+2.4461;

拟合效果:

 

 

随机梯度下降法 stochastic gradient descent

也叫做增量下降法 Incremental gradient descent

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


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

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

matlab实现

clear;
clc;
X=random('norm',1,20,[1,100]);
noise=random('norm',0,5,[1,100]);
Y=3*X+2+noise;
plot(X,Y,'*');
hold on;
sita=zeros(1,2);
maxiter=200;
a=0.001;
min_J=0.001;
for iter=1:maxiter
    for i=1:100
            sita(1)=sita(1)+a*(Y(i)-sita(1)*X(i)-sita(2))*X(i);
            sita(2)=sita(2)+a*(Y(i)-sita(1)*X(i)-sita(2));
     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) =

2.9087
sita(2) =
1.8797

得到近似直线:Y=2.9087X+1.8797



对比

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

 

解析法

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


具体求解及证明略。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值