常見回歸和分類損失函數比較
來自專欄數據科學の雜談
代碼
損失函數的一般表示為 ,用以衡量真實值 和預測值 之間不一致的程度,一般越小越好。為了便於不同損失函數的比較,常將其表示為單變數的函數,在回歸問題中這個變數為 ,在分類問題中則為 。下面分別進行討論。
回歸問題的損失函數
回歸問題中 和 皆為實數 ,因此用殘差 來度量二者的不一致程度。殘差 (的絕對值) 越大,則損失函數越大,學習出來的模型效果就越差(這裡不考慮正則化問題)。
常見的回歸損失函數有:
- 平方損失 (squared loss) :
- 絕對值 (absolute loss) :
- Huber損失 (huber loss) :
其中最常用的是平方損失,然而其缺點是對於異常點會施以較大的懲罰,因而不夠robust。如果有較多異常點,則絕對值損失表現較好,但絕對值損失的缺點是在 處不連續可導,因而不容易優化。
Huber損失是對二者的綜合,當 小於一個事先指定的值 時,變為平方損失,大於 時,則變成類似於絕對值損失,因此也是比較robust的損失函數。三者的圖形比較如下:
分類問題的損失函數
對於二分類問題, ,損失函數常表示為關於 的單調遞減形式。如下圖:
被稱為margin,其作用類似於回歸問題中的殘差 。
二分類問題中的分類規則通常為
可以看到如果 ,則樣本分類正確, 則分類錯誤,而相應的分類決策邊界即為 。所以最小化損失函數也可以看作是最大化margin的過程,任何合格的分類損失函數都應該對margin<0的樣本施以較大的懲罰。
1、 0-1損失 (zero-one loss)
0-1損失對每個錯分類點都施以相同的懲罰,這樣那些「錯的離譜「 (即 )的點並不會收到大的關注,這在直覺上不是很合適。另外0-1損失不連續、非凸,優化困難,因而常使用其他的代理損失函數進行優化。
2、Logistic loss
logistic Loss為Logistic Regression中使用的損失函數,下面做一下簡單證明:
Logistic Regression中使用了Sigmoid函數表示預測概率:
而
因此利用 ,可寫為 ,此為一個概率模型,利用極大似然的思想:
?
兩邊取對數,又因為是求損失函數,則將極大轉為極小:
這樣就得到了logistic loss。
如果定義 ,則極大似然法可寫為:
取對數並轉為極小得:
上式被稱為交叉熵損失 (cross entropy loss),可以看到在二分類問題中logistic loss和交叉熵損失是等價的,二者區別只是標籤y的定義不同。
3、Hinge loss
hinge loss為svm中使用的損失函數,hinge loss使得 的樣本損失皆為0,由此帶來了稀疏解,使得svm僅通過少量的支持向量就能確定最終超平面。
4、指數損失(Exponential loss)
exponential loss為AdaBoost中使用的損失函數,使用exponential loss能比較方便地利用加法模型推導出AdaBoost演算法 。
AdaBoost推導然而其和squared loss一樣,對異常點敏感,不夠robust。
5、modified Huber loss
modified huber loss結合了hinge loss和logistic loss的優點,既能在 時產生稀疏解提高訓練效率,又能進行概率估計。另外其對於 樣本的懲罰以線性增加,這意味著受異常點的干擾較少,比較robust。scikit-learn中的SGDClassifier同樣實現了modified huber loss。
最後來張全家福:
從上圖可以看出上面介紹的這些損失函數都可以看作是0-1損失的單調連續近似函數,而因為這些損失函數通常是凸的連續函數,因此常用來代替0-1損失進行優化。它們的相同點是都隨著 而加大懲罰;不同點在於,logistic loss和hinge loss都是線性增長,而exponential loss是以指數增長。
值得注意的是上圖中modified huber loss的走向和exponential loss差不多,並不能看出其robust的屬性。其實這和演算法時間複雜度一樣,成倍放大了之後才能體現出巨大差異:
/
推薦閱讀:
※數據挖掘有哪些常見的應用模型?
※轉載 Mike Jordan - 人工智慧:革命尚未到來
※自然語言分析加關係網路 - 半自動分析倚天屠龍記
※3.機器學習演算法應用---演算法選擇
※機器學習基石筆記1:基礎概念
TAG:機器學習 |