我试图在Octave中实现以下算法:
此算法的代码:
x = [1
2
3
]
y = [4,5,6]
m = length(y)
x = [ones(m , 1) , x]
theta = zeros(2, 1);
printf(mat2str(theta , 2))
sprintf('%f' , theta)
iterations = 5;
alpha = 0.07;
for iter = 1:iterations
theta
theta = theta -((1/m) * ((x * theta) - y)' * x)' * alpha;
end
如何访问y
的每个单独值,因为上面的代码似乎在每次迭代中访问整个y
矩阵?
是否有一些隐含的功能同意允许仅使用y
而不使用像y[i]
那样i
是当前迭代的东西?
答案 0 :(得分:1)
每当总和看起来像
sum(a_i * b_i, for i = 1 ... m)
它可以重写为矢量之间的点积
A^T * B
A和B是大小为m的向量。 在算法描述中,他们使用第一个公式,在代码中,它是第二个。
(x * theta) - y)' * x
是向量(x * theta) - y)
和x
之间的点积。