mllib如何计算梯度

时间:2015-09-02 01:07:41

标签: apache-spark linear-regression apache-spark-mllib gradient-descent

需要mllib专家帮助解释线性回归代码。在LeastSquaresGradient.compute

override def compute(
    data: Vector,
    label: Double,
    weights: Vector,
    cumGradient: Vector): Double = {
  val diff = dot(data, weights) - label
  axpy(diff, data, cumGradient)
  diff * diff / 2.0
}

cumGradient是使用axpy计算的,它只是y + = a * x,或者在这里 cumGradient + = diff * data

我想了很久但是可以连接渐变下降文档中定义的渐变计算。理论上,梯度是在一个特定加权参数中相对于Δ的损失的斜率。我没有看到这个与之类似的axpy实现中的任何内容。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

这不是一个真正的编程问题,但是为了让您了解最小二乘回归的成本函数是什么,定义为

enter image description here

其中theta是权重向量。

上述成本函数的部分导数是:

enter image description here

如果在所有theta上计算:

enter image description here

显而易见,上述内容相当于为所有数据点计算的cumGradient += diff * data并引用Wikipedia

  

在直角坐标系中,梯度是矢量场,其分量是f

的偏导数