梯度下降法

from http://blog.csdn.net/qustqustjay/article/details/46738989

梯度下降法是一种最优化算法,常用来优化参数,通常也称为最速下降法。

梯度下降法是一般分为如下两步:

1)首先对参数θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量;

2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。

以一个线性回归问题为例,应用libsvm包里的数据heart_scale.mat数据做测试。假设要学习这么一个函数:

那么损失函数可以定义成:

其中X看以看成一行一行的样本向量,那么Θ就是一列一列的了。目标很简单,就是求损失J最小值时候的解Θ:

先直接求导,对于求导过程,详解如下:

首先定义损失变量:


那么损失函数就可以表示成:


一步一步的求导:


再求:


那么把分步骤合起来就是:


令导数为0求此时的Θ,整理一下,有:


用矩阵符号将上面的细节运算抽象一下:


让导数为0,那么求得的解为:


求解矩阵的逆复杂度有点儿高,可以用梯度下降来求解:


其中γ就是下降的速度,一般是一个小的数值,可以从0.01开始尝试,越大下降越快,收敛越快。

迭代终止的条件取:

 

部分代码如下:

w_old=zeros(size(X,2),1);%%初始化参数w

k=1;

while 1

     minJ_w(k) = 1/2 * (norm(X*w_old - Y))^2;  %%损失函数 公式(1) %%norm默认为L2标准化

     w_new = w_old - gamma*(X'*X*w_old - X'*Y);%%梯度下降公式

%%公式(2

if norm(w_new-w_old) < epsilon        %%终止条件

         W_best = w_new;

         break;

     end

     w_old = w_new;

     k=k+1;

end

实验结果:

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值