计算成本函数和正则逻辑回归的梯度时面临的问题

时间:2018-10-28 17:44:22

标签: matlab machine-learning logistic-regression sigmoid

我正在Coursera的Andrew Ng的机器学习课程中进行第4周的作业。我应该计算成本函数和正则逻辑回归的梯度。这是我写的:

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:\users\syed\desktop\machine-learning-ex3\ex3\lrCostFunction.m
LineNumber: 19

Please correct your code and resubmit.

我无法理解问题出在哪里,因为在第3周我遇到了同样的问题,我不得不计算成本函数和梯度,并且上面的代码起作用了。

1 个答案:

答案 0 :(得分:1)

您正在执行第19行的16x3矩阵与4x3矩阵的内积,因为错误本身就在说明。转置第二个矩阵,此错误将消失。

当要进行内积运算时,第一矩阵/向量的第二维应与第二矩阵/向量的第一维匹配。

您在计算成本时有一些错误,它是元素明智的乘积,请使用.*而不是*,并且您的括号格式也是错误的,将其与之比较,看看是否有任何错误错误:

-1/m * sum( ( y .* log(y^) ) + ( (1-y) .* (log(1-y^)) ) )