您好,感谢您的帮助。我正在学习吴恩达的机器学习课程,第二周我必须解决关于单变量和多变量梯度下降的家庭作业。我能够为单个变量编码梯度下降:然而,当我试图为多个变量编码梯度降低时,我开始遇到多个错误。
在网上搜索时,许多人建议使用以下公式:
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。