逻辑回归代价函数
Logisitic Regression Cost Function
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
我正在尝试计算逻辑回归的成本函数。谁能告诉我为什么这不准确?
更新:Sigmoid 函数
function g = sigmoid(z)
g = zeros(size(z));
g = 1./(1 + exp(1).^(-z));
end
正如 Dan 所说,您的 costFunction 调用了 sigmoid 两次。首先,它在 X*theta
上执行 sigmoid 函数;然后它对 sigmoid(X*theta)
的结果再次执行 sigmoid 函数。因此,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
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
我正在尝试计算逻辑回归的成本函数。谁能告诉我为什么这不准确?
更新:Sigmoid 函数
function g = sigmoid(z)
g = zeros(size(z));
g = 1./(1 + exp(1).^(-z));
end
正如 Dan 所说,您的 costFunction 调用了 sigmoid 两次。首先,它在 X*theta
上执行 sigmoid 函数;然后它对 sigmoid(X*theta)
的结果再次执行 sigmoid 函数。因此,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