梯度下降是一个最优化算法,通常也称为最速下降。
梯度下降是求解无约束优化问题最简单和最古老的方法之一,许多有效算法都是以它为基础进行改进和修正而得到的。
最速下降是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。
虽然古老而简单,但是很多时候依然可以将它用在一些情况中,也很适合快速入门。
Spark中的优化组件
Spark中的MLlib下的optimization包含了梯度下降的相关组件。
从数理基础和很多改进算法来看,梯度下降的主要抽象集中在两个方面,即如何度量梯度和如何更新参数。
Spark中的梯度抽象为Gradient.scala
而更新抽象为Updater.scala
而具体的实现梯度有
- LogisticGradient
- LeastSquaresGradient
- HingeGradient
对于更新也是三种实现
- SimpleUpdater
- L1Updater
- SquaredL2Updater
Spark本身包含了很多内置的机器学习算法,比如线性回归,分类等等,它们都有依赖梯度下降算法,所有单纯从使用角度并不需要太关心这个,因为使用的时候一般不需要具体指定。
比如线性回归:
直接使用梯度下降
出于很多原因,大部分时候需要直接调用梯度下降,或者自己实现更新器,达到自定义的目的。
这里以简单的y=3*x+1
为例来简单使用一下
测试数据就随意
先将它们转为RDD对象
构造求解器
调用求解
输出如图:
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2015/05/27/spark-gradient-descent/