我正在实现逻辑回归函数的一部分,但似乎除了-inf之外似乎得不到任何东西。不确定如何获得其他任何东西,因为如果有1输出,则log(1-1)将其变为-inf。
有什么想法?
% Calculates error based on X, Y, theta
function error = empRisk(X,Y, theta)
n = length(X);
error = 0;
for i=1: n
y = Y(i,:);
x = X(i,:);
binLoss = classify(theta,x);
part1 = y-1;
part2 = log(1-binLoss);% -Inf if 1-1??
part3 = y*(log(binLoss));
error = error + ((part1*part2)-part3);
end
error = error*(1/n);
end
% Implements the classification function
function value = classify(theta, x)
z = dot(theta,x);
result = (1/(1+exp(-z)));
% Output 0,1 based on result
if result >= 0.5
value = 1;
else
value = 0;
end
end
以下是empRisk应该执行的公式:
答案 0 :(得分:3)
你有一点概念问题。 The loss function typically used when talking about empirical risk minimization is the 0-1 loss,当您的分类值等于您的目标值时基本为0,否则为1(并且您对训练样本的平均值为。)
如果您正在谈论the logistic loss,那么这是完全不同的事情。在这种情况下,您不希望if
函数中的最终classify()
语句。所以你应该返回result
。
theta
中的经验风险损失(0-1损失)是非凸的,theta
中的逻辑损失是凸的,这是人们使用它的原因之一,因为它&# 39;即使在大问题中,找到正确的theta
也是计算上可行的。这不是经验风险损失的情况。