需要梯度下降数学实现解释。

时间:2016-11-11 18:26:12

标签: math machine-learning linear-algebra linear-regression logistic-regression

我知道解决方案,但我不明白以下等式是如何转换为代码的。

Gradient Descent

  • 为什么总和不见了?
  • 我们为什么要调换((sigmoid(X *) theta)-y)表达?

解决方案

grad  = (1/m) * ((sigmoid(X * theta)-y)' * X);

2 个答案:

答案 0 :(得分:1)

原始行J(theta)代表逻辑回归的成本函数。

您展示的代码grad = ...是J(theta)相对于参数的渐变;也就是说,grad是d / dtheta J(theta)的实现。导数是重要的,因为它用于梯度下降,以将参数移向其最佳值(以最小化成本J(theta))。

以下为渐变的公式,以红色标出,取自下面的第一个link。注意,J(theta)与上面的公式相同,h(x)表示sigmoid函数。

所有训练样例的总梯度需要m的总和。在上面grad的代码中,由于省略了求和,您在一个训练示例中计算梯度;因此,您的代码可能会计算stochastic gradient descent的渐变,而非全梯度下降。

enter image description here

有关详细信息,您可以谷歌搜索"逻辑回归成本函数衍生物",这会导致以下链接:

  1. 这个特别具备您需要的一切:http://feature-space.com/2011/10/28/logistic-cost-function-derivative/

  2. 这些显然是Andrew Ng的课程中关于机器学习和梯度下降的逻辑回归的一些讲义:http://www.holehouse.org/mlclass/06_Logistic_Regression.html

  3. 如何逐步计算衍生物的说明:https://math.stackexchange.com/questions/477207/derivative-of-cost-function-for-logistic-regression

答案 1 :(得分:1)

如上所述,您发布的数学表达式是成本函数,而您显示的代码片段是渐变。

但是,总和并没有丢失。让我们分解吧。

成本函数相对于第j个参数的梯度是 enter image description here

使用X * theta,您会得到一个向量,其中包含所有数据点和参数向量的点积。

使用sigmoid(X * theta)评估每个点积的sigmoid。

使用X * theta)-y,您会得到一个包含所有预测与实际标签之间差异的向量。

使用sigmoid(X * theta)-y)' * X转换sigmoid评估向量并使用数据集的每个列计算其点积(即每个数据点的每个x_j)。

考虑一下,你会看到这与表达式中的总和完全相同,但是对参数向量的所有条目进行了评估,而不只是j