【问题标题】:Vectorization of a gradient descent code梯度下降码的向量化
【发布时间】:2014-01-11 04:36:18
【问题描述】:

我正在 Matlab 上实现批量梯度下降。我对theta 的更新步骤有疑问。 theta 是两个分量(两行)的向量。 X 是一个矩阵,包含m 行(训练样本数)和n=2 列(特征数)。 Y 是一个m 行向量。

在更新步骤中,我需要将每个theta(i) 设置为

theta(i) = theta(i) - (alpha/m)*sum((X*theta-y).*X(:,i))

这可以通过for 循环来完成,但我不知道如何对其进行矢量化(因为X(:,i) 术语)。

有什么建议吗?

【问题讨论】:

  • 如果X 的大小为 m x 2,theta 为 2 x 1,y 为 m x 1,X*theta 是如何定义的?你如何从中减去y?以及如何将结果乘以列向量X(:,i)
  • @LuisMendo。通过使用矩阵乘法的规则
  • @MadPhysicist 哦,我明白了。对不起
  • @LuisMendo 如果X 的大小为 mx2,theta 为 2x1,则 X*theta 为 mx1,我们可以减去 y (mx1)。 X(:,i) 的乘法是逐项乘法 (.*)
  • @bigTree 对不起,我的错。我现在看到了

标签: matlab gradient-descent


【解决方案1】:

看起来您正在尝试做一个简单的矩阵乘法,这是 MATLAB 最擅长的。

theta = theta - (alpha/m) * (X' * (X*theta-y));

【讨论】:

  • @MadPhysicist 非常感谢。顺便说一句,我发现这不是执行梯度下降的好方法,因为它不会同时更新所有特征
  • 这不只在X = [ones(m, 1), data(:,1)] 的地方正确吗?因为不像theta_1theta_0不应该乘以x^i所以X必须包含1s的列?
  • 这可以进一步简化为 theta - (alpha/m)*(theta - A' * y) 吗?
  • @XPD 仅当X'*X == I
【解决方案2】:

除了Mad Physicist给出的答案外,还可以套用以下。

theta = theta - (alpha/m) * sum( (X * theta - y).* X )';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2020-03-23
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多