MATLAB:解决inf结果

时间:2014-10-03 19:49:40

标签: matlab

我试图计算以下内容。问题是我得到了正在计算的第三个项目的inf。我该如何解决这个问题,以便不再存在价值?

num_labels = 2;
htheta = [0.2 0.5; 0.8 0.1; 0.6 1; 0.7 0.4]
y =      [1;  0;   0;  1;]
m = 4;


wes = ones(m, num_labels);
J = 0;


for k = 1:num_labels
        for r = 1:m
        if (htheta(r, k) < 0.5) && y(r, 1) ~= 0
            wes(r, k) = 2;
        else if (htheta(r, k) > 0.5) && y(r, 1) ~= 1
                wes(r, k) = 4;
            else wes(r, k) = 1;
            end
        end
    end
    yk = y == k;
    hthetak = htheta(:, k);
    Jk1 = (-yk .* log(hthetak) - (1 - yk) .* log(1 - hthetak));
    Jk2 = (-yk .* log(hthetak) - (1 - yk) .* log(1 - hthetak)) .* wes(:, k);
    Jk3 = 1 / m * sum( (-yk .* log(hthetak) - (1 - yk) .* log(1 - hthetak)) .* wes(:, k) );
    J = J + Jk3;
end

Jk1
Jk2
Jk3
J

1 个答案:

答案 0 :(得分:0)

htheta在其中一对索引(3,2)中等于1。

Jk3使用值log(1 - hthetak)计算,hthetak == 1未定义。 同时,yk的值为零,因为k=2y永远不会等于2.

这使得产品-Inf,你减去了这个,因此得到Inf

关于Infinity and NaN的MathWorks页面可能会有所帮助。