Machine learning 在倍频程中实现多变量梯度下降;sum";

Machine learning 在倍频程中实现多变量梯度下降;sum";,machine-learning,octave,gradient-descent,Machine Learning,Octave,Gradient Descent,我正在学习Andrew Ng的机器学习课程,我正试图将我的头脑集中在多变量梯度下降的矢量化实现上,这是课程中的一个可选练习 这是有问题的算法(摘自): 我只是不能用sum在八度音程中实现这一点,但我不知道如何将x(I)-y(I)的假设和乘以所有变量xj(I)。我尝试了以下代码的不同迭代,但没有成功(要么维度不正确,要么答案错误): 然而,正确的答案是完全不明显的(对于像我这样的线性代数初学者来说,来自): 对于涉及sum的情况,是否有一条经验法则来管理上述转换 如果是这样,是否有与上述相反的版

我正在学习Andrew Ng的机器学习课程,我正试图将我的头脑集中在多变量梯度下降的矢量化实现上,这是课程中的一个可选练习

这是有问题的算法(摘自):

我只是不能用
sum
在八度音程中实现这一点,但我不知道如何将x(I)-y(I)的假设和乘以所有变量xj(I)。我尝试了以下代码的不同迭代,但没有成功(要么维度不正确,要么答案错误):

然而,正确的答案是完全不明显的(对于像我这样的线性代数初学者来说,来自):

对于涉及
sum
的情况,是否有一条经验法则来管理上述转换

如果是这样,是否有与上述相反的版本(即从基于
sum
的解决方案转变为基于一般乘法的解决方案),因为我能够使用
sum
为单个变量(尽管不是非常优雅的变量)的梯度下降找到正确的实现:

请注意,这只涉及矢量化的实现,尽管关于如何实现这一点还有几个问题,但我的问题主要涉及使用
sum

在倍频程中实现算法。如果您遇到以下形式的问题,一般的“经验法则”如下:

SUM_i f(x_i, y_i, ...) g(a_i, b_i, ...)
然后,您可以通过

因为这只是一个典型的点积,在数学上(在有限维的欧几里德空间中)看起来像

<A, B> = SUM_i A_i B_i = A'B
只是

<X * theta-y), X> = <H_theta(X) - y, X> = SUM_i (H_theta(X_i) - y_i) X_i
==SUM_i(H_theta(X_i)-y_i)X_i

正如你所看到的,这是双向的,因为这只是点积的一个数学定义。

特别提到你问题的这一部分——“我不知道如何将x(I)-y(I)的假设之和乘以所有变量xj(I)。”

在倍频程中,可以使用“.”将xj(i)乘以所有预测,因此可以写成:

m = size(X, 1);
predictions = X * theta;
sqrErrors = (predictions-y).^2;
J = 1 / (2*m) * sum(sqrErrors);

向量乘法自动包括计算乘积之和。因此不必指定sum()函数。通过使用sum()函数,可以将向量转换为标量,这很糟糕

实际上,您不想在这里使用求和,因为您试图计算的是所有θ的单个值,而不是总成本J。当您在一行代码中这样做时,如果您将其求和,您将得到一个值(所有θ的和)。 在上一个练习中,当您逐个计算θ值时,求和是正确的,尽管没有必要。这是一样的:

temp0 = theta(1) - (alpha/m * (X * theta - y)' * X(:, 1));
temp1 = theta(2) - (alpha/m * (X * theta - y)' * X(:, 2));

theta(1) = temp0;
theta(2) = temp1;

可能重复的查看重复链接-特别是使用
sum
的第二种方法。
<A, B> = SUM_i A_i B_i = A'B
(X * theta-y)' * X)
<X * theta-y), X> = <H_theta(X) - y, X> = SUM_i (H_theta(X_i) - y_i) X_i
m = size(X, 1);
predictions = X * theta;
sqrErrors = (predictions-y).^2;
J = 1 / (2*m) * sum(sqrErrors);
temp0 = theta(1) - (alpha/m * (X * theta - y)' * X(:, 1));
temp1 = theta(2) - (alpha/m * (X * theta - y)' * X(:, 2));

theta(1) = temp0;
theta(2) = temp1;