Spark(Scala) - 如何优化目标函数参数

时间:2018-01-04 00:26:15

标签: scala apache-spark mathematical-optimization apache-spark-mllib

我有函数f从R2到R,它接受2个参数(a和b)并返回一个标量。 我想使用优化器来估计a和b的值,其中f返回的值最大化(或最小化,我可以使用-f)。

我已经从mllib查看了LBFGS优化器,请参阅:

我的问题是我不确定我是否完全理解这个优化器是如何工作的。

我之前在python和R中看到的优化器通常需要以下参数:目标函数的实现,目标函数参数的一组初始值(以及可选:目标函数的附加参数,边界对于应在其中搜索参数的域...)。

通常,优化器使用用户提供的一组初始参数迭代地调用函数,并计算梯度,直到目标函数返回的值收敛(或丢失)。然后返回最佳参数集和目标函数的对应值。非常标准的东西。

在这种情况下,我看到org.apache.spark.mllib.optimization.LBFGS.runLBFGS期望得到标记数据的RDD和渐变。

  1. 优化程序期望的这个data RDD参数是什么?
  2. 参数gradient是目标函数渐变的实现吗?
  3. 如果我要为自己的目标函数编写自己的渐变,那么应该如何计算损失函数(迭代时目标函数返回的值的比率n /(n-1)?
  4. 论证initialWeights是什么?它是一个包含要优化的参数的初始值的数组吗?
  5. 理想情况下,您是否能够提供一个非常简单的代码示例,展示如何使用org.apache.spark.mllib.optimization.LBFGS.runLBFGS优化简单的目标函数?
  6. 最后, Breeze 可能是一个有趣的选择吗? https://github.com/scalanlp/breeze/blob/master/math/src/main/scala/breeze/optimize/package.scala
  7. 谢谢!

0 个答案:

没有答案