我正在以八度音阶实现简单的梯度下降,但它不起作用。这是我正在使用的数据:
X = [1 2 3
1 4 5
1 6 7]
y = [10
11
12]
theta = [0
0
0]
alpha = 0.001 and itr = 50
这是我的梯度下降实现:
function theta = Gradient(X,y,theta,alpha,itr)
m= length(y)
for i = 1:itr,
th1 = theta(1) - alpha * (1/m) * sum((X * theta - y) .* X(:, 1));
th2 = theta(2) - alpha * (1/m) * sum((X * theta - y) .* X(:, 2));
th3 = theta(3) - alpha * (1/m) * sum((X * theta - y) .* X(:, 3));
theta(1) = th1;
theta(2) = th2;
theta(3) = th3;
end
问题是:
- 它会产生一些我使用的 theta 值,
theta * [1 2 3]
并期望输出接近 10(来自 y)。这是检验假设的正确方法吗?[h(x) = theta' * x] - 我如何确定它应该迭代多少次?如果我给它 1500 次迭代,theta 会变得非常小(在 e 中)。
- 如果我在 X 中使用两位数,theta 会再次变得太小。即使迭代次数 < 5。
我已经为这些事情苦苦挣扎了很长时间。无法自己解决。
抱歉格式错误。