2014-10-03 68 views
1

我試圖計算以下內容。問題是我得到正在計算的第三個項目的inf。我該如何解決這個問題,以便不再存在inf值?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

好東西,你有你的答案和你的問題解決,但請留下一些信息給其他人會有類似的問題。在上次編輯中,您刪除了所有(_faulty_)代碼,因此現在沒有人能夠知道答案的內容。不要害羞地在代碼中留下你的代碼,即使有一些缺陷,也就是知識如何傳遞。 – Hoki 2014-10-04 18:15:19

回答

0

htheta處於其對指數(3,2)中的一個等於1。

Jk3使用log(1 - hthetak)的值計算,其值hthetak == 1未定義。 與此同時,yk具有零值,因爲k=2y是永遠等於2

這使得該產品-Inf,和你減去這一點,因此你Inf

此MathWorks頁面有關Infinity and NaN可能會對您有所幫助。

+0

我從你的編輯和評論中得知它不是你實際運行的代碼?這是你傳遞htheta值的函數,而問題中的那些只是你選擇的例子? – chrisb2244 2014-10-04 16:41:57

+0

你的回答非常重要,所以謝謝你,克里斯! – badmler 2014-10-04 18:04:16