我在通过Coursera安德鲁吴教授的机器学习课程的第二周。我们正在努力线性回归和我现在正在处理的编码成本函数。
我写的代码正确地解决了这个问题,但没有通过的提交过程和失败的单元测试,因为我已经硬编码theta的值,不允许为THETA超过两个值。
下面是到目前为止,我已经得到了代码
function J = computeCost(X, y, theta)
m = length(y);
J = 0;
for i = 1:m,
h = theta(1) + theta(2) * X(i)
a = h - y(i);
b = a^2;
J = J + b;
end;
J = J * (1 / (2 * m));
end
单元测试是
computeCost( [1 2 3; 1 3 4; 1 4 5; 1 5 6], [7;6;5;4], [0.1;0.2;0.3])
和应产生ANS = 7.0175
所以,我需要添加另一个for循环遍历THETA,因此允许任何数量的THETA值的,但我真该死如果我能环绕我的头如何/在哪里。
任何人都可以提出一个方法,我可以让这个函数中的任何数量的THETA值?
如果您需要更多的信息来了解我想请问一下,我会尽我所能提供的。
您可以使用八度/ Matlab的操作的量化。遍历整个向量 - 这是非常糟糕的主意,如果你的语言PROGRAMM让你向量化操作。 R,八度,MATLAB,Python的(numpy的)允许此操作。例如,你可以得到标生产,如果THETA =在接下来的方式(T0,T1,T2,T3)和X =(X0,X1,X2,X3):THETA * X” =(T0,T1,T2, T3)*(X0,X1,X2,X3)” = T0 * X0 + T1 * X1 + T2 * X2 + T3 * X3结果将是标量。
例如,你可以在未来的方式你的代码向量化H:
H = (theta'*X')';
S = sum((H - y) .^ 2);
J = S / (2*m);
上面的回答是完美的,但你也可以做
H = (X*theta);
S = sum((H - y) .^ 2);
J = S / (2*m);
而不是计算
(theta' * X')'
再服用就可以直接计算出转
(X * theta)
它完美的作品。
它可以在一个线 - 间#训练集来也做
J=(1/(2*m)) * ((((X * theta) - y).^2)'* ones(m,1));
J = sum(((X*theta)-y).^2)/(2*m);
ans = 32.073
上面的回答是完美的,我想这个问题深深的一天,并与倍频还很陌生,那么,就一起学习!
如果你希望只使用矩阵,那么:
temp = (X * theta - y); % h(x) - y
J = ((temp')*temp)/(2 * m);
clear temp;
function J = computeCost(X, y, theta)
m = length(y);
J = 0;
% Hypothesis h(x)
h = X * theta;
% Error function (h(x) - y) ^ 2
squaredError = (h-y).^2;
% Cost function
J = sum(squaredError)/(2*m);
end
我认为,我们需要使用迭代的成本,而一个迭代很多通用的解决方案,也是结果显示在PDF 32.07可能不是平地机找原因是它的一个案例了许多训练数据的正确答案。
我认为它应该依次通过这样的
for i in 1:iteration
theta = theta - alpha*(1/m)(theta'*x-y)*x
j = (1/(2*m))(theta'*x-y)^2