机器学习算法中回归算法有很多,例如神经网络回归算法、蚁群回归算法,支持向量机回归算法等,其中也包括本篇文章要讲述的梯度下降算法,本篇文章将主要讲解其基本原理以及基于Spark MLlib进行实例示范,不足之处请多多指教。

梯度下降算法包含多种不同的算法,有批量梯度算法,随机梯度算法,折中梯度算法等等。对于随机梯度下降算法而言,它通过不停的判断和选择当前目标下最优的路径,从而能够在最短路径下达到最优的结果。我们可以在一个人下山坡为例,想要更快的到达山低,最简单的办法就是在当前位置沿着最陡峭的方向下山,到另一个位置后接着上面的方式依旧寻找最陡峭的方向走,这样每走一步就停下来观察最下路线的方法就是随机梯度下降算法的本质。

随机梯度下降算法理论基础

在线性回归中,我们给出回归方程,如下所示:

我们知道,对于最小二乘法要想求得最优变量就要使得计算值与实际值的偏差的平方最小。而随机梯度下降算法对于系数需要通过不断的求偏导求解出当前位置下最优化的数据,那么梯度方向公式推导如下公式,公式中的θ会向着梯度下降最快的方向减少,从而推断出θ的最优解。

因此随机梯度下降法的公式归结为通过迭代计算特征值从而求出最合适的值。θ的求解公式如下。

α是下降系数,即步长,学习率,通俗的说就是计算每次下降的幅度的大小,系数越大每次计算的差值越大,系数越小则差值越小,但是迭代计算的时间也会相对延长。θ的初值可以随机赋值,比如下面的例子中初值赋值为0。

Spark MLlib随机梯度下降算法实例

下面使用Spark MLlib来迭代计算回归方程y=2x的θ最优解,代码如下:

package cn.just.shinelon.MLlib.Algorithmimport java.utilimport scala.collection.immutable.HashMap/*** 随机梯度下降算法实战* 随机梯度下降算法:最短路径下达到最优结果* 数学表达公式如下:* f(θ)=θ0x0+θ1x1+θ2x2+...+θnxn* 对于系数要通过不停地求解出当前位置下最优化的数据,即不停对系数θ求偏导数* 则θ求解的公式如下:* θ=θ-α(f(θ)-yi)xi* 公式中α是下降系数,即每次下降的幅度大小,系数越大则差值越小,系数越小则差值越小,但是计算时间也相对延长*/
object SGD {var data=HashMap[Int,Int]()         //创建数据集def getdata():HashMap[Int,Int]={for(i <- 1 to 50){                //创建50个数据集data += (i->(2*i))              //写入公式y=2x}data                              //返回数据集}var θ:Double=0                        //第一步 假设θ为0var α:Double=0.1                      //设置步进系数def sgd(x:Double,y:Double)={        //随机梯度下降迭代公式θ=θ-α*((θ*x)-y)                 //迭代公式}def main(args: Array[String]): Unit = {val dataSource=getdata()          //获取数据集dataSource.foreach(myMap=>{       //开始迭代sgd(myMap._1,myMap._2)          //输入数据})println("最终结果值θ为:"+θ)}
}

需要注意的是随着步长系数增大以及数据量的增大,θ值偏差越来越大。同时这里也遗留下一个问题,当数据量大到一定程度,为什么θ值会为NaN,笔者心中有所疑惑,如果哪位大佬有想法可以留言探讨,谢谢!!!


如果你想和我一起学习交流,共同进步,欢迎加群:

随机梯度下降法概述与实例相关推荐

  1. 机器学习-算法背后的理论与优化(part7)--随机梯度下降法概述

    学习笔记,仅供参考,有错必究 随机梯度下降法概述 机器学习场景 算法模型和损失函数 一个有监督学习算法或模型实质上是在拟合一个预测函数侧或者称为假设函数,其形式固定但参数 w ∈ R d w \in ...

  2. 【统计学习】随机梯度下降法求解感知机模型

    1. 感知机学习模型 感知机是一个二分类的线性分类问题,求解是使误分类点到超平面距离总和的损失函数最小化问题.采用的是随机梯度下降法,首先任意选取一个超平面w0和b0,然后用梯度下降法不断地极小化目标 ...

  3. 梯度下降算法_批梯度下降法,Minibatch梯度下降法和随机梯度下降法之间的区别...

    什么是梯度下降法? 梯度下降法是一种机器学习中常用的优化算法,用来找到一个函数(f)的参数(系数)的值,使成本函数(cost)最小. 当参数不能解析计算时(如使用线性代数),并且必须通过优化算法搜索时 ...

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

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

  5. 1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD

    排版也是醉了见原文:http://www.cnblogs.com/maybe2030/p/5089753.html 在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度 ...

  6. 【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )

    文章目录 I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 ) II . 梯度下降 示例说明 ( 单个参数 ) III . 梯度下降 示例说明 ( 多个参数 ...

  7. 梯度下降法和随机梯度下降法

    1. 梯度 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度.比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y) ...

  8. 梯度下降法、随机梯度下降法、批量梯度下降法及牛顿法、拟牛顿法、共轭梯度法

    http://ihoge.cn/2018/GradientDescent.html http://ihoge.cn/2018/newton1.html 引言 李航老师在<统计学习方法>中将 ...

  9. 基于随机梯度下降法的手写数字识别、epoch是什么、python实现

    基于随机梯度下降法的手写数字识别.epoch是什么.python实现 一.普通的随机梯度下降法的手写数字识别 1.1 学习流程 1.2 二层神经网络类 1.3 使用MNIST数据集进行学习 注:关于什 ...

最新文章

  1. ASP.NET的include的用法
  2. ecm工作原理 usb_USB中CDC-ECM的了解和配置
  3. data augmentation 数据增强方法总结
  4. 如何在JSF中实现自定义密码强度指示器
  5. mysql leave的作用_MySQL数据库中DELIMITER的作用
  6. c语言提取七位数讲解,输入一个七位数将这个数的奇位数重新组合成新的四位数并输出的编程怎么写    在线等急...
  7. 关于IE的RegExp.exec
  8. java变量类型概念_java变量类型
  9. 微信公众号接入百度天气API接口
  10. 判断malloc申请内存_Linux内存使用情况与监测
  11. 20191112每日一句
  12. php来源德育管理系统,西安交通大学城市学院学生服务中心互联网学生工作管理系统...
  13. VMware Ubuntu 18.04 搭建个人Hustoj教程
  14. Django REST Framework——3. 序列化器(Serializer)
  15. 占用内存最小linux,Linux系统排查1—内存篇
  16. css3水墨遮罩,CSS3水墨风格带音乐动画图特效
  17. GIT远程分支误删恢复
  18. vue 全景图 photo-sphere-viewer 实现
  19. 安卓导出Excel,txt文件工具类
  20. 什么是缺陷密度?计算的公式及示例

热门文章

  1. Office2016打开文件提示“文件已损坏”,WPS打开却正常的解决办法
  2. LeetCode 43. 字符串相乘【c++/java详细题解】
  3. 用ajax+jquery+json+css3+html5实现登录、注册、以及主页面的增删改查
  4. WFD抓包及视频提取
  5. HTMLCSS仿京东详情页静态页面制作总结
  6. 数据类型,栈内存、堆内存
  7. max模型怎么导入ue4_请问max的场景怎么完整导入到ue4?
  8. HTML模仿win10亮度调节效果
  9. linux下执行php命令echo不输出,linux echo命令以及linux echo命令提示权限不够的方法...
  10. 程序员有话说,只务正业就够了吗?