梯度下降算法在 matlab 中给出不正确的答案



我正在学习机器学习课程,并尝试在 matlab 中实现梯度下降算法。函数 computeCost 工作正常,因为我已经单独测试过它。我用它来查看每次迭代的成本,而且它似乎根本没有减少。它只是随机波动。alpha 的值被定为 0.01,所以我知道这不是学习率太大的问题。我得到的θ答案与预期的输出相去甚远。我哪里出错了?提前感谢!

function theta = gradientDescent(X, y, theta, alpha, num_iters)
%GRADIENTDESCENT Performs gradient descent to learn theta
% Initialize some useful values
m = length(y); % number of training examples
temp1=0;
temp2=0;
for iter = 1:num_iters
for k = 1:m
temp1 = temp1 + (theta(1) + theta(2)*X(k, 2) - y(k));
temp2 = temp2 + ((theta(1) + theta(2)*X(k, 2) - y(k))*X(k, 2));
end 
theta(1) = theta(1)-(1/m)*alpha*temp1;
theta(2) = theta(2)-(1/m)*alpha*temp2;

computeCost(X, y, theta)
end
end

编辑:这里也是计算成本

function J = computeCost(X, y, theta)
m = length(y); % number of training examples

J = 0;
temp = 0;
for index = 1:m
temp = temp + (theta(1) + theta(2)*X(index, 2)-y(index))^2;
end 
J = temp/(2*m); 
end

尝试更改:

temp1=0;
temp2=0;
for iter = 1:num_iters

for iter = 1:num_iters
temp1=0;
temp2=0;

每次迭代都需要重新计算梯度(或者您实际上是在动量项中构建(。

相关内容

最新更新