mllib是怎么计算梯度的
how did mllib calculate gradient
求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 * 数据
我想了很久,但可以联系到梯度下降文档中定义的梯度计算。理论上,梯度是在一个特定的加权参数中损失对 delta 的斜率。我在这个 axpy 实现中看不到任何类似的东西。
有人可以解释一下吗?
这不是一个真正的编程问题,而是为了让您了解最小二乘回归的成本函数定义为
其中 theta 是权重向量。
上述代价函数的偏导数为:
如果对所有 theta 进行计算:
很明显,以上等同于 cumGradient += diff * data
计算所有数据点并引用 Wikipedia
in a rectangular coordinate system, the gradient is the vector field whose components are the partial derivatives of f
求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 * 数据
我想了很久,但可以联系到梯度下降文档中定义的梯度计算。理论上,梯度是在一个特定的加权参数中损失对 delta 的斜率。我在这个 axpy 实现中看不到任何类似的东西。
有人可以解释一下吗?
这不是一个真正的编程问题,而是为了让您了解最小二乘回归的成本函数定义为
其中 theta 是权重向量。
上述代价函数的偏导数为:
如果对所有 theta 进行计算:
很明显,以上等同于 cumGradient += diff * data
计算所有数据点并引用 Wikipedia
in a rectangular coordinate system, the gradient is the vector field whose components are the partial derivatives of f