Возникающие проблемы в вычислении функции стоимости и градиента регуляризованной логистической регрессии
Я занимаюсь на 4-й неделе в курсе машинного обучения Эндрю Нг на Coursera. Я должен вычислить функцию стоимости и градиент регуляризованной логистической регрессии. Вот что я написал:
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 ответ
Вы делаете внутреннее произведение матрицы 16x3 с матрицей 4x3 в строке 19, как говорит сама ошибка. переставь вторую матрицу и эта ошибка исчезнет.
когда вы хотите сделать внутреннее произведение, второе измерение первой матрицы / вектора должно соответствовать первому измерению второй матрицы / вектора.
у вас есть ошибки в расчете стоимости, это элементный продукт, использование .*
вместо *
, и ваша скобка неправильная, сравните это с этим и посмотрите, есть ли ошибки:
-1/m * sum( ( y .* log(y^) ) + ( (1-y) .* (log(1-y^)) ) )