0

我正在以八度音阶实现简单的梯度下降,但它不起作用。这是我正在使用的数据:

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。

我已经为这些事情苦苦挣扎了很长时间。无法自己解决。

抱歉格式错误。

4

1 回答 1

0

您的批量梯度下降实现对我来说似乎非常好。您能否更具体地说明您面临的错误是什么。话虽如此,对于您的问题,这是检验假设的正确方法吗?[h(x) = theta' * x]。根据此处测试集的尺寸,您应该将其测试为 h(x) = X*theta。对于第二个问题,迭代次数取决于提供的数据集。要确定优化的迭代次数,您需要绘制成本函数和迭代次数。随着迭代次数的增加,成本函数的值应该减少。通过这种方式,您可以决定需要多少次迭代。您也可以考虑以 0.001、0.003、0.01、0.03、0.1 ... 的步长增加 alpha 的值,以考虑最佳可能的 alpha 值。对于你的第三个问题,我猜您是在直接尝试对您在这个问题中的数据进行建模。这个数据非常小,它只包含 3 个训练示例。您可能正在尝试实现线性回归算法。为此,您需要包含足够数据的适当训练集来训练您的模型。然后你可以用你的测试数据来测试你的模型。请参阅 www.coursera.org 中的 Andrew Ng 机器学习课程。您将在该课程中找到更多信息。

于 2014-06-21T13:09:52.680 回答