Spark中的梯度下降

27 5月
预计阅读时间: 2 分钟

梯度下降是一个最优化算法,通常也称为最速下降。
梯度下降是求解无约束优化问题最简单和最古老的方法之一,许多有效算法都是以它为基础进行改进和修正而得到的。

最速下降是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。

虽然古老而简单,但是很多时候依然可以将它用在一些情况中,也很适合快速入门。

Spark中的优化组件

Spark中的MLlib下的optimization包含了梯度下降的相关组件。

从数理基础和很多改进算法来看,梯度下降的主要抽象集中在两个方面,即如何度量梯度和如何更新参数。

Spark中的梯度抽象为Gradient.scala


而更新抽象为Updater.scala


而具体的实现梯度有

  • LogisticGradient
  • LeastSquaresGradient
  • HingeGradient

对于更新也是三种实现

  • SimpleUpdater
  • L1Updater
  • SquaredL2Updater

Spark本身包含了很多内置的机器学习算法,比如线性回归,分类等等,它们都有依赖梯度下降算法,所有单纯从使用角度并不需要太关心这个,因为使用的时候一般不需要具体指定。

比如线性回归:


直接使用梯度下降

出于很多原因,大部分时候需要直接调用梯度下降,或者自己实现更新器,达到自定义的目的。

这里以简单的y=3*x+1为例来简单使用一下

测试数据就随意


先将它们转为RDD对象


构造求解器


调用求解


输出如图:

输出

发表评论

电子邮件地址不会被公开。