如何通过for循环(没有矢量化公式)为多个变量开发梯度下降



您好,感谢您的帮助。我正在学习吴恩达的机器学习课程,第二周我必须解决关于单变量和多变量梯度下降的家庭作业。我能够为单个变量编码梯度下降:然而,当我试图为多个变量编码梯度降低时,我开始遇到多个错误。

在网上搜索时,许多人建议使用以下公式:

theta = theta - (alpha/m) * (X' * (X * theta - y))

然而,因为我没有完全理解简化,而且我更喜欢我真正能够掌握和舒适的代码,所以我正在努力使用for循环编写一个具有多个变量的梯度下降。

alpha = 0.01 % learning rate
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
for i = 1:(size(X,2))
theta(i) = theta(i) - alpha / m * sum((X * theta - y)) .* X(:,i);
end
end

使用这种类型的代码,我会得到以下错误:

错误:=:不一致参数(op1是1x1,op2是47x1(

有没有一种方法可以在不使用矢量化和for循环的情况下执行这种梯度下降?如果是,我错在哪里?

您正在进行非法的矩阵乘法运算。如果op1是n*m,那么op2应该是m*z,结果将是op3 n*z。

相关内容

  • 没有找到相关文章

最新更新