【问题标题】:Gradient Descent (Linear regression with one variable)梯度下降(一个变量的线性回归)
【发布时间】:2014-12-07 07:04:47
【问题描述】:

我试图实现梯度下降(一个变量的线性回归)。我对下面的代码有一些疑问。

在附件 ex1data1 中,第 1 列和第 2 列分别代表 X 和 y。 最初我试图实现如下算法

for iter=i:iterations

 for i=1:2
     h=(theta'*X')';
     s=sum((h-y).*X(i));
     s1=s*alpha/m;
     theta(i)=theta(i)-s1;

  end
 ..
end

但我无法得出 theta 的最佳值。

然后我尝试了矢量化

for iter=i:iterations
   h=(theta'*X')';
   theta = theta -((1/m) * (h - y)' * X)' * alpha;
end

并得到最优值。

你能解释一下这两个代码有什么区别吗?我发现它一样。有人告诉它矢量化比循环更可取,但只是出于好奇而想知道。在寻找向量公式时,我需要特别注意什么吗?

【问题讨论】:

    标签: matlab machine-learning octave


    【解决方案1】:

    我得到了答案。问题在于计算 s 的步骤。 最初是s=sum((h-y).*X(i));。不过应该是s=sum((h-y).*X(:,i));

    for i=1:2,
         h=(theta'*X')';
         s=sum((h-y).*X(:,i));
         s1=s*(alpha/m);
         theta(i)=theta(i)-s1;
    end;
    

    【讨论】:

      【解决方案2】:

      在矩阵中 axb 与 bxa 不同,因此应该使用 h = X*theta 来匹配 y 的维度

      temp = zeros(2,1);
          for iter = 1:num_iters
      
              temp(1)= theta(1)-alpha*(1/m)*sum(((X*theta)-y).*X(:,1));
      
              temp(2)= theta(2)-alpha*(1/m)*sum(((X*theta)-y).*X(:,2));
              theta = temp;
      
          theta = temp;
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 2019-10-09
        • 1970-01-01
        • 2020-10-05
        • 2022-07-27
        • 2016-10-22
        • 1970-01-01
        相关资源
        最近更新 更多