我一直致力于创建一个通用方程来计算theta函数。我目前的等式并不普遍。这适用于最多2个thetas。如果我必须对theta进行2以上的计算,我必须手动修改theta()
括号内的数字。
有没有办法设置通用功能?像thata(j) = equation
这样的东西。我在下面粘贴了两个代码,一个正在工作但不是通用的,另一个是我尝试过的,但最终仍然出错。
代码1:
for iter = 1:num_iters
theta(1) = theta(1) - (alpha/m)*((X*theta-y)')*X(:,1),
theta(2) = theta(2) - (alpha/m)*((X*theta-y)')*X(:,2);
theta_hist(iter,1) = theta(1);
theta_hist(iter,2) = theta(2);
end
代码2:
num_cols = size(X,2)
for inter = 1:num_iters
for j = 1:num_cols
theta(j) = theta(j) - (alpha/m)*((X*theta-y)')*X(:,j),
end,
end,
此代码的挑战是代码第二次循环(i
= 1,j
= 2)。该函数使用theta的新值。这搞砸了计算。
非常感谢任何反馈或建议。
以下链接中提到了此问题的更多说明: https://docs.google.com/document/d/1XwAVV1OBN9BhQ7n60F2oEUoT263t_2hcAAuCaroR-2g/edit?usp=sharing
答案 0 :(得分:1)
经过多次迭代,我能够回答我自己的问题。
代码发布在github的以下链接中: https://github.com/Boniface316/Octave/tree/master/GradientDescent_ThetaCalculator
感谢您的帮助。
答案 1 :(得分:0)
您应该对代码进行矢量化。您没有提供矩阵尺寸和/或样本输入,但如果我猜对了,以下内容应该可以满足您的需求:
% Some random inputs
alpha = 1;
m = 1;
num_iters = 15;
N = 5; k = 12;
X = randn(k,N);
y = randn(k,1);
theta = zeros(N,1);
theta_hist = zeros(N,num_iters);
for i = 1:num_iters
theta = theta - (alpha/m)*X'*(X*theta-y);
theta_hist(:,i) = theta;
end