【问题标题】:Vectorized gradient descent basics向量化梯度下降基础
【发布时间】:2014-06-21 02:58:31
【问题描述】:

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

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 * [1 2 3] 中使用的 theta 值,并期望输出接近 10(来自 y)。这是检验假设的正确方法吗? [h(x) = theta' * x]
  • 如何确定它应该迭代多少次?如果我给它 1500 次迭代,theta 会变得非常小(在 e 中)。
  • 如果我在 X 中使用两位数,theta 会再次变得太小。即使迭代

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

抱歉,格式错误。

【问题讨论】:

    标签: machine-learning octave vectorization gradient-descent


    【解决方案1】:

    您的批量梯度下降实现对我来说似乎非常好。您能否更具体地说明您面临的错误是什么。话虽如此,对于您的问题,这是检验假设的正确方法吗? [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 机器学习课程。您将在该课程中找到更多信息。

    【讨论】:

    • 1.我认为h(x) = theta' * X 将与X * theta 相同,因为theta 在前者中被转置。 2.将绘制成本函数以找到否。的迭代。 3. 如果我使用两位数,为什么 theta 会变得太小。在 X 在同一个例子中?我没有在两位数数据上使用经过训练的模型。只是为稍大的数字找到新的 theta 值。
    • @user3762027 如果你使用 theta' * X,那么确保 X 矩阵看起来像 [1 1 1......1; x11 x21....;等等而不是 [1 x11 x12....;1 x21 x22....;...] 我希望你明白我想说的话
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2020-03-23
    • 2014-01-11
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多