Nob*_*lis 6 machine-learning octave gradient-descent
我正在做Andrew Ng关于机器学习的课程,我正试图围绕多个变量的渐变下降的矢量化实现,这是课程中的一个可选练习.
这是有问题的算法(取自此处):
sum虽然我不能用八度音阶来做这个,但我不确定如何将x(i)-y(i)的假设之和乘以所有变量xj(i).我尝试了以下代码的不同迭代,但无济于事(维度不正确或答案错误):
theta = theta - alpha/m * sum(X * theta - y) * X;
Run Code Online (Sandbox Code Playgroud)
然而,正确的答案是完全不明显的(对于像我这样的线性代数初学者,从这里开始):
theta = theta - (alpha/m * (X * theta-y)' * X)';
Run Code Online (Sandbox Code Playgroud)
对于sum涉及如上所述的变换的案件,是否有经验法则?
如果是这样,是否存在上述相反的版本(即从sum基于解决方案到一般乘法解决方案),因为我能够sum为单个变量提供一个正确的梯度下降实现(尽管不是很优雅)一):
temp0 = theta(1) - (alpha/m * sum(X * theta - y));
temp1 = theta(2) - (alpha/m * sum((X * theta - y)' * X(:, 2)));
theta(1) = temp0;
theta(2) = temp1;
Run Code Online (Sandbox Code Playgroud)
请注意,这只涉及矢量化实现,虽然有关SO如何完成的几个问题,但我的问题主要是关于Octave中算法的实现sum.
一般的“经验法则”如下,如果您遇到以下形式的事情
SUM_i f(x_i, y_i, ...) g(a_i, b_i, ...)
Run Code Online (Sandbox Code Playgroud)
然后你可以轻松地对其进行矢量化(这就是上面所做的)
f(x, y, ...)' * g(a, b, ...)
Run Code Online (Sandbox Code Playgroud)
因为这只是一个典型的点积,在数学中(在有限维的欧几里得空间中)看起来像
<A, B> = SUM_i A_i B_i = A'B
Run Code Online (Sandbox Code Playgroud)
因此
(X * theta-y)' * X)
Run Code Online (Sandbox Code Playgroud)
只是
<X * theta-y), X> = <H_theta(X) - y, X> = SUM_i (H_theta(X_i) - y_i) X_i
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这是双向的,因为这只是点积的数学定义。
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |