我正在吴恩达的机器学习课程中做第四周的作业。我应该计算正则化逻辑回归的成本函数和梯度。这是我写的:
function [J, grad] = lrCostFunction(theta, X, y, lambda)
m = length(y); % number of training examples
J = 0;
grad = zeros(size(theta));
n=length(theta);
thetat=theta';
t=thetat(:,[2:n]);
t=t';
J = (-1/m*(sum((log(sigmoid(X*theta)))'*y)+((log(1-sigmoid(X*theta)))'*(1-y))))+((lambda/(2*m))*(sum(t.^2)));
grad=(1/m)*(X'*(sigmoid(X*theta)-y))+((lambda/m)*theta);
grad(1)=(1/m)*(sum(sigmoid(X*theta)-y));
end
我得到这个错误:
!! Submission failed: operator *: nonconformant arguments (op1 is 16x3, op2 is 4x3)
Function: lrCostFunction
FileName: c:userssyeddesktopmachine-learning-ex3ex3lrCostFunction.m
LineNumber: 19
Please correct your code and resubmit.
我无法理解我哪里出了问题,因为我在第3周遇到了同样的问题,我必须计算成本函数和梯度,上面的代码起了作用。
您正在做一个16x3矩阵与第19行中的4x3矩阵的内积,正如错误本身所说的那样。转置第二个矩阵,这个误差就会消失。
当你想做内积时,第一个矩阵/向量的第二个维度应该与第二个矩阵/矢量的第一个维度匹配。
你在计算成本时有一些错误,这是元素乘积,用.*
代替*
,你的括号形式也有错误,把它和这个比较一下,看看是否有错误:
-1/m * sum( ( y .* log(y^) ) + ( (1-y) .* (log(1-y^)) ) )