在不使用矩阵的情况下用一个变量计算线性回归的成本函数

Computing Cost function for Linear regression with one variable without using Matrix

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

函数 computeCost 有 3 个参数:

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

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

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

您有两个轻微的(但基本的)错误 - 它们是非常简单的错误,但肯定可以忽略。


  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).