2014-09-30 29 views
1

我正在實現邏輯迴歸函數的一部分,但似乎無法獲得除-inf之外的其他任何內容。不知道如何獲得其他任何東西,因爲如果有1個輸出,那麼日誌(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

+0

這聽起來更像是一個算法問題,而不是一個編程問題。你的分類功能是否正確?也許'binLoss'應該是'result'變量?你能給出一個鏈接來描述你試圖實現的算法嗎? – David 2014-09-30 02:24:03

回答

3

你有一點的概念問題。 The loss function typically used when talking about empirical risk minimization is the 0-1 loss,當您的分類值等於您的目標值時,基本上爲0,否則爲1(並且您在訓練樣本中的平均值)。

如果您正在談論the logistic loss,那麼這完全是另一回事。在這種情況下,您不希望classify()函數中的最終if聲明。所以你應該返回result

的經驗風險的損失(0-1負於)是非凸的theta和物流損失在theta,這是人們使用它的原因之一凸,因爲它是計算上是可行發現即使正確theta在很大的問題。這不是經驗性風險損失的情況。