梯度下降法(一)入门

2012-12-11 13:14 22981人阅读 评论(12) 收藏 举报
本文章已收录于:
分类:
【算法】(27)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

梯度下降法是一个一阶最优化算法,通常也称为最速下降法。我之前也没有关注过这类算法。最近,听斯坦福大学的机器学习课程时,碰到了用梯度下降算法求解线性回归问题,于是看了看这类算法的思想。今天只写了一些入门级的知识。

我们知道,函数的曲线如下:

编程实现:c++ code

[cpp] view plaincopyprint?
  1. /*
  2. * @author:郑海波
  3. * blog.csdn.net/nuptboyzhb/
  4. * 2012-12-11
  5. */
  6. #include <iostream>
  7. #include <math.h>
  8. using namespace std;
  9. int main()
  10. {
  11. double e=0.00001;//定义迭代精度
  12. double alpha=0.5;//定义迭代步长
  13. double x=0;//初始化x
  14. double y0=x*x-3*x+2;//与初始化x对应的y值
  15. double y1=0;//定义变量,用于保存当前值
  16. while (true)
  17. {
  18. x=x-alpha*(2.0*x-3.0);
  19. y1=x*x-3*x+2;
  20. if (abs(y1-y0)<e)//如果2次迭代的结果变化很小,结束迭代
  21. {
  22. break;
  23. }
  24. y0=y1;//更新迭代的结果
  25. }
  26. cout<<"Min(f(x))="<<y0<<endl;
  27. cout<<"minx="<<x<<endl;
  28. return 0;
  29. }
  30. //运行结果
  31. //Min(f(x))=-0.25
  32. //minx=1.5
  33. //Press any key to continue
/** @author:郑海波* blog.csdn.net/nuptboyzhb/* 2012-12-11*/
#include <iostream>
#include <math.h>
using namespace std;
int main()
{double e=0.00001;//定义迭代精度double alpha=0.5;//定义迭代步长double x=0;//初始化xdouble y0=x*x-3*x+2;//与初始化x对应的y值double y1=0;//定义变量,用于保存当前值while (true){x=x-alpha*(2.0*x-3.0);y1=x*x-3*x+2;if (abs(y1-y0)<e)//如果2次迭代的结果变化很小,结束迭代{break;}y0=y1;//更新迭代的结果}cout<<"Min(f(x))="<<y0<<endl;cout<<"minx="<<x<<endl;return 0;
}
//运行结果
//Min(f(x))=-0.25
//minx=1.5
//Press any key to continue

问题:

迭代步长alpha为什么要选择0.5??选择其他的值可以吗?它的取值与迭代的次数、收敛性及结果的准确性有何关系?如果选择alpha的值?下次好好的探讨。

转载请声明:http://blog.csdn.net/nuptboyzhb/article/details/8281923

梯度下降法(一)入门相关推荐

  1. 机器学习入门(09)— 偏导数、梯度概念、梯度下降法理论和实现

    1. 偏导数概念 对于式 4-6 而言 式(4.6)有两个变量,求导数时有必要区分对哪个变量求导数,即对 x0 和 x1 两个变量中的哪一个求导数.另外,我们把这里讨论的有多个变量的函数的导数称为偏导 ...

  2. 机器学习入门系列一(关键词:单变量线性回归,梯度下降法)

    机器学习入门系列一(关键词:单变量线性回归,梯度下降法) 如上图所示,我们的目标是希望通过这些数据得到城市人口数和利润可能的对应关系,并可以通过城市人口数(利润)来预测它的利润(城市人口数),在这里我 ...

  3. 数学优化入门:梯度下降法、牛顿法、共轭梯度法

    1.基本概念 1.1 方向导数 1.2 梯度的概念 因此,对于一元函数,即y=f(x),其梯度的方向总是指向x轴正方向或反方向,而大小即该点的导数. 如果考虑z=f(x,y)描绘的是一座在点(x,y) ...

  4. 深度学习入门之SGD随机梯度下降法

    SGD SGD为随机梯度下降法.用数学式可以将 SGD 写成如下的式(6.1). 这里把需要更新的权重参数记为W,把损失函数关于W的梯度记为 ∂L/∂W .ηηη 表示学习率,实际上会取 0.01 或 ...

  5. 通俗易懂讲解梯度下降法!

    Datawhale干货 作者:知乎King James,伦敦国王大学 知乎 | https://zhuanlan.zhihu.com/p/335191534 前言:入门机器学习必须了解梯度下降法,虽然 ...

  6. python机器学习库sklearn——SGD梯度下降法

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  7. 机器学习(四):批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)

    本文基于吴恩达老师的机器学习课程.看了吴恩达老师的机器学习课程,收获很多,想把课上学做的笔记结合自己的理解以及找到的一些资料综合起来做一个总结.大家感兴趣也可以自己去看一看吴恩达老师的课,这套课程,被 ...

  8. 深度学习原理-----线性回归+梯度下降法

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  9. 李弘毅机器学习:第四章—梯度下降法

    李弘毅机器学习:第四章-梯度下降法 什么是梯度下降法? Review: 梯度下降法 Tip1:调整学习速率 小心翼翼地调整学习率 自适应学习率 Adagrad 算法 Adagrad 是什么? Adag ...

最新文章

  1. java基础:简单实现线程池
  2. 想写Python爬虫?看这5个教程就行了!
  3. 学习JavaScript的24条实用建议
  4. Django(part49)--用Django自带的User模型类进行模拟登录
  5. javafx css颜色_JavaFX技巧7:使用CSS颜色常量/派生颜色
  6. python txt转json_实战篇 | 用Python来找你喜欢的妹子(二)
  7. Wireshark条件过滤后的数据包保存
  8. macosx下apache的默认用户为daemon
  9. Python批量检测服务器端口可用性与Socket函数使用
  10. mongodb连接池 php,node.js,mongodb_nodejs使用mongodb连接池,node.js,mongodb - phpStudy
  11. I/O多路复用技术(select/poll/epoll)
  12. 内网漫游之SOCKS代理大结局
  13. 【bzoj2242】计算器 离散对数
  14. 无理数究竟是什么?连续性公理的产物?——读戴德金之二
  15. 宠物合成养成游戏养猫养牛流量主小程序开发
  16. 关于使用RedisTemplate在主从架构下使用Lettuce的情况下如何实现读写分离
  17. 计算机本地连接没有有效ip配置,本地连接没有有效的ip配置,详细教您本地连接没有有效的ip配置怎么解决...
  18. android手机功耗优化,安卓统一推送实测:待机功耗降30%
  19. 自动抓取app数据的攻与防
  20. mysql count统计

热门文章

  1. java与室内设计_【Java JDK和躺平设计家3D室内设计哪个好用】Java JDK和躺平设计家3D室内设计对比-ZOL下载...
  2. mysql 表中添加数据类型_MySQL数据表添加字段(三种方式)
  3. php中pre标签,html中pre标签与code标签的作用与用法
  4. nginx php跳转url参数,NGINX 中把url中的内容当初参数处理
  5. php 读取 linux 文件,PHP读取大文件,linux读取日志
  6. 创建自己的内容提供器
  7. 81. Leetcode 21. 合并两个有序链表 (排序)
  8. Leetcode 剑指 Offer 40. 最小的k个数 (每日一题 20210825)
  9. 沉浸式技术immersive technology
  10. pytorch 笔记:torch.distributions 概率分布相关(更新中)