在物流挤压功能中避免无限

时间:2014-09-30 01:17:57

标签: matlab machine-learning

我正在实现逻辑回归函数的一部分,但似乎除了-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应该执行的公式:enter image description here

1 个答案:

答案 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也是计算上可行的。这不是经验风险损失的情况。