一般來說,我們在進行機器學習任務時,使用的每一個算法都有一個目標函數,算法便是對這個目標函數進行優化,特別是在分類或者回歸任務中,便是使用損失函數(Loss Function)作為其目標函數,又稱為代價函數(Cost Function)。
損失函數是用來評價模型的預測值Y^=f(X)與真實值Y的不一致程度,它是一個非負實值函數。通常使用L(Y,f(x))來表示,損失函數越小,模型的性能就越好。
設總有N個樣本的樣本集為(X,Y)=(xi,yi),yi,i∈[1,N]為樣本ii的真實值,yi^=f(xi),i∈[1,N]為樣本i的預測值,f為分類或者回歸函數。
那麼總的損失函數為:
![機器學習中常見的損失函數](http://p2.ttnews.xyz/loading.gif)
常見的損失函數ℓ(yi,yi^)有以下幾種:
Zero-one Loss
Zero-one Loss即0-1損失,它是一種較為簡單的損失函數,如果預測值與目標值不相等,那麼為1,否則為0,即:
![機器學習中常見的損失函數](http://p2.ttnews.xyz/loading.gif)
可以看出上述的定義太過嚴格,如果真實值為1,預測值為0.999,那麼預測應該正確,但是上述定義顯然是判定為預測錯誤,那麼可以進行改進為Perceptron Loss。
Perceptron Loss
Perceptron Loss即為感知損失。即:
其中t是一個超參數閾值,如在PLA(Perceptron Learning Algorithm,感知機算法)中取t=0.5。
Hinge Loss
Hinge損失可以用來解決間隔最大化問題,如在SVM中解決幾何間隔最大化問題,其定義如下:
yi∈{−1,+1}
問題:SVM損失函數怎麼寫成Hinge損失的形式的?這可是面試常考的呢。
Log Loss
(重點)在使用似然函數最大化時,其形式是進行連乘,但是為了便於處理,一般會套上log,這樣便可以將連乘轉化為求和,由於log函數是單調遞增函數,因此不會改變優化結果。因此log類型的損失函數也是一種常見的損失函數,如在LR(Logistic Regression, 邏輯迴歸)中使用交叉熵(Cross Entropy)作為其損失函數。即:
yi∈{0,1}
規定 0⋅log⋅=0
Square Loss
Square Loss即平方誤差,常用於迴歸中。即:
yi,yi^∈R
Absolute Loss
Absolute Loss即絕對值誤差,常用於迴歸中。即:
yi,yi^∈R
Exponential Loss
Exponential Loss為指數誤差,常用於boosting算法中,如AdaBoost。即:
yi∈{−1,1}
正則
一般來說,對分類或者回歸模型進行評估時,需要使得模型在訓練數據上使得損失函數值最小,即使得經驗風險函數最小化,但是如果只考慮經驗風險(Empirical risk),容易過擬合(詳細參見防止過擬合的一些方法),因此還需要考慮模型的泛化能力,一般常用的方法便是在目標函數中加上正則項,由損失項(Loss term)加上正則項(Regularization term)構成結構風險(Structural risk),那麼損失函數變為:
其中λ是正則項超參數,常用的正則方法包括:L1正則與L2正則,詳細介紹參見:我上一篇文章。
各損失函數圖形如下:
閱讀更多 機器學習與數據挖掘 的文章