【问题标题】:Computing Cost function for Linear regression with one variable without using Matrix在不使用矩阵的情况下计算具有一个变量的线性回归的成本函数
【发布时间】:2016-01-13 08:18:39
【问题描述】:

我是 Matlab 和机器学习的新手,我尝试计算梯度下降的成本函数。

函数 computeCost 有 3 个参数:

  • X mx2 矩阵
  • y m 维向量
  • theta :二维向量

我已经有了使用矩阵乘法的解决方案

function J = computeCost(X, y, theta)
  m = length(Y);
  h = X * theta;
  sError = (h - y) .^ 2;
  J = sum(sError) / (2 * m);
end

但现在,我尝试在没有矩阵乘法的情况下做同样的事情

function J = computeCost(X, y, theta)
  m = length(Y);
  S = 0;
  for i = 1:m
    h = X(i, 1) + theta(2) * X(i, 2);
    S = S + ((h - y(i)) ^ 2);
  end
  J = (1/2*m) * S;
end

但我没有得到相同的结果,而且首先肯定是好的(我之前已经使用过)。

【问题讨论】:

    标签: matlab matrix machine-learning gradient-descent


    【解决方案1】:

    你有两个轻微的(但基本的)错误 - 它们是非常简单的错误,尽管这当然可以被忽略。


    1. 您忘记在假设中包含偏差项:

      h = X(i,1)*theta(1) + X(i,2)*theta(2);
      %//         ^^^^^^
      

      请记住,线性回归的假设等于theta^{T}*x。您没有包含所有 theta 术语 - 仅包含第二个术语。

    2. 你最后一个由(2*m) 规范化的语句有点不对劲。你目前拥有它:

      J = (1/2*m) * S;
      

      因为乘法和除法的运算规则相同,所以这与(1/2)*m 相同,这不是你想要的。只需确保 (2*m) 有括号围绕自身,以确保将其评估为 S / (2*m)

      J = (1/(2*m)) * S;
      

      这将确保首先评估 2*m,然后将其倒数乘以误差平方和。


    当您解决这些问题时,您将获得与使用矩阵公式相同的结果。

    顺便说一句,您的代码中有轻微的拼写错误。应该是m = length(y),而不是m = length(Y)

    【讨论】:

    • 我得到了第一个,但我认为我错了。但是第二个...谢谢!
    • @Arthur - 我的荣幸 :) 我最初忽略了第二个,但后来我想通了。祝你好运!
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多