Tyl*_*gan 2 matlab machine-learning octave
function [J, grad] = costFunction(theta, X, y)
m = length(y);
h = sigmoid(X*theta);
sh = sigmoid(h);
grad = (1/m)*X'*(sh - y);
J = (1/m)*sum(-y.*log(sh) - (1 - y).*log(1 - sh));
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试计算逻辑回归的成本函数.有人可以告诉我为什么这不准确?
更新:Sigmoid功能
function g = sigmoid(z)
g = zeros(size(z));
g = 1./(1 + exp(1).^(-z));
end
Run Code Online (Sandbox Code Playgroud)
小智 7
正如Dan所说,你的costFunction两次调用sigmoid.首先,它执行sigmoid函数X*theta; 然后它再次对结果执行sigmoid函数sigmoid(X*theta).因此,sh = sigmoid(sigmoid(X*theta)).您的成本函数应该只调用一次sigmoid函数.
请参阅下面的代码,我删除了sh变量并将其替换为h其他地方.这导致sigmoid函数只被调用一次.
function [J, grad] = costFunction(theta, X, y)
m = length(y);
h = sigmoid(X*theta);
grad = (1/m)*X'*(h - y);
J = (1/m)*sum(-y.*log(h) - (1 - y).*log(1 - h));
end
Run Code Online (Sandbox Code Playgroud)