在不使用矩阵的情况下用一个变量计算线性回归的成本函数
Computing Cost function for Linear regression with one variable without using Matrix
我是 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
但是我没有得到相同的结果,而且 first 肯定是好的(我以前已经用过)。
您有两个轻微的(但基本的)错误 - 它们是非常简单的错误,但肯定可以忽略。
您忘记在假设中包含偏差项:
h = X(i,1)*theta(1) + X(i,2)*theta(2);
%// ^^^^^^
请记住,线性回归的假设等于 theta^{T}*x
。您没有包含所有 theta
项 - 仅包含第二项。
您上次通过 (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)
.
我是 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
但是我没有得到相同的结果,而且 first 肯定是好的(我以前已经用过)。
您有两个轻微的(但基本的)错误 - 它们是非常简单的错误,但肯定可以忽略。
您忘记在假设中包含偏差项:
h = X(i,1)*theta(1) + X(i,2)*theta(2); %// ^^^^^^
请记住,线性回归的假设等于
theta^{T}*x
。您没有包含所有theta
项 - 仅包含第二项。您上次通过
(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)
.