我必须在matlab中进行类似的计算,但给出不同的结束值。
在第一个代码中,我有gaven数组''theta''和初始值,下面的代码作为
for i=1:m
for j=1:n
sum=sum + (theta'*X(j,:)' - y(j))*X(j,i);
end
theta(i)=(theta(i)-(alpha*sum)/m);
sum=0;
end
以上代码的输出为340403.617738,109912.678489,-5931.109115
在第二个代码中,我有gaven数组''theta''和初始值,但我初始化''theta_b''等于''theta''另一个数组,我所做的所有更改都是数组''theta_b''并在结束时我将“theta_b”的价值指定为“theta”。
theta_b=theta;
for i=1:m
for j=1:n
sum=sum + (theta'*X(j,:)' - y(j))*X(j,i);
end
theta_b(i)=(theta(i)-(alpha*sum)/m);
sum=0;
end
theta=theta_b;
以上代码的输出为340403.617738,110014.524234,-6046.767912
因为上面的两个代码都是一样的,所以为什么输出是不同的。
由于
答案 0 :(得分:1)
在第一个循环中,您将更新theta(i)的值并使用更新的值计算总和。在第二个循环中,您在开头制作theta的副本,并在整个过程中使用它来计算总和。新的更改将保存到theta_b(i)中,而不是用于计算总和。