我知道解决方案,但我不明白以下方程如何转换为代码。
- 为什么总和不见了?
- 为什么我们要转置 ((sigmoid(X * theta)-y) 表达式?
解决方案
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 上搜索“逻辑回归成本函数导数”,该链接会指向以下链接:
这个尤其拥有您需要的一切:http://feature-space.com/2011/10/28/logistic-cost-function-derivative/
这些显然是 Andrew Ng 的机器学习和梯度下降逻辑回归类(class)的一些讲义:http://www.holehouse.org/mlclass/06_Logistic_Regression.html
如何逐步计算导数的说明:https://math.stackexchange.com/questions/477207/derivative-of-cost-function-for-logistic-regression
关于math - 需要梯度下降数学实现解释。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554016/