2014-10-03 3 views
1

Я пытаюсь вычислить следующее. Проблема в том, что я получаю inf для третьего элемента, который вычисляется. Как я могу разрешить это, чтобы больше не было inf-value?MATLAB: Resolve inf result

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

Хорошо, что у вас был ваш ответ, и ваша проблема решена, но, пожалуйста, оставьте некоторую информацию другим людям, у которых будут подобные проблемы. В вашем последнем редактировании вы удалили весь свой (_faulty_) код, так что теперь никто не может понять, о чем идет речь. Не стесняйтесь оставлять свой код в своем вопросе, даже если есть несколько недостатков, вот как можно передавать знания. – Hoki

ответ

0

htheta равно 1 в одном из своих пар индексов (3,2).

Jk3 рассчитывается с использованием значения log(1 - hthetak), что не определено для hthetak == 1. В то же время, yk имеет нулевое значение, так как k=2 и y никогда не равен 2.

Это делает продукт -Inf, и вы вычитая это, следовательно, вы получите Inf.

Эта страница MathWorks о Infinity and NaN может быть полезна.

+0

Я беру это из вашего редактирования и комментирую, что это не тот код, который вы фактически используете? Это функция, которой вы передаете значения htheta, и те, которые были в вопросе, были просто примерами, которые вы выбрали? – chrisb2244

+0

Ваш ответ дошел до сути, так что спасибо, Крис! – badmler

Смежные вопросы