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

Gradient descent math implementation explanation needed.

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

解决方案

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

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

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

下面是渐变的公式,用红色勾勒出来,取自下面的第一个 link。请注意,J(theta) 与上面的公式相同,h(x) 表示 sigmoid 函数。

所有训练样本的总梯度需要对 m 求和。在上面 grad 的代码中,由于省略了求和,您正在计算一个训练示例的梯度;因此,您的代码可能正在计算 stochastic gradient descent 的梯度,而不是完整的梯度下降。

有关更多信息,您可以 google for "logistic regression cost function derivative",这会导致这些链接:

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

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

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

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

不过求和不漏。让我们分解一下。

代价函数关于第j个参数的梯度为

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

使用 sigmoid(X * theta) 计算每个点积的 sigmoid。

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

对于 sigmoid(X * theta)-y)' * X,您正在转置 S 型评估向量并计算其与数据集的每一列的点积(即每个数据点的每个 x_j) .

想一想,您会发现这正是表达式中的求和,但对参数向量的所有条目进行了评估,而不仅仅是 j