標籤:

常見回歸和分類損失函數比較

常見回歸和分類損失函數比較

來自專欄數據科學の雜談

代碼

損失函數的一般表示為 L(y,f(x)) ,用以衡量真實值 y 和預測值 f(x) 之間不一致的程度,一般越小越好。為了便於不同損失函數的比較,常將其表示為單變數的函數,在回歸問題中這個變數為 y-f(x) ,在分類問題中則為 yf(x) 。下面分別進行討論。

回歸問題的損失函數

回歸問題中 yf(x) 皆為實數 in R ,因此用殘差 y-f(x) 來度量二者的不一致程度。殘差 (的絕對值) 越大,則損失函數越大,學習出來的模型效果就越差(這裡不考慮正則化問題)。

常見的回歸損失函數有

  • 平方損失 (squared loss)(y-f(x))^2
  • 絕對值 (absolute loss) : |y-f(x)|
  • Huber損失 (huber loss) : left{egin{matrix}frac12[y-f(x)]^2 & qquad |y-f(x)| leq delta \ delta|y-f(x)| - frac12delta^2 & qquad |y-f(x)| > deltaend{matrix}
ight.

其中最常用的是平方損失,然而其缺點是對於異常點會施以較大的懲罰,因而不夠robust。如果有較多異常點,則絕對值損失表現較好,但絕對值損失的缺點是在 y-f(x)=0 處不連續可導,因而不容易優化。

Huber損失是對二者的綜合,當 |y-f(x)| 小於一個事先指定的值 delta 時,變為平方損失,大於 delta 時,則變成類似於絕對值損失,因此也是比較robust的損失函數。三者的圖形比較如下:


分類問題的損失函數

對於二分類問題, yin left{-1,+1 
ight} ,損失函數常表示為關於 yf(x) 的單調遞減形式。如下圖:

yf(x) 被稱為margin,其作用類似於回歸問題中的殘差 y-f(x)

二分類問題中的分類規則通常為 sign(f(x)) = left{egin{matrix} +1 qquad if;;f(x) geq 0 \ -1 qquad if;;f(x) < 0end{matrix}
ight.

可以看到如果 yf(x) > 0 ,則樣本分類正確, yf(x) < 0 則分類錯誤,而相應的分類決策邊界即為 f(x) = 0 。所以最小化損失函數也可以看作是最大化margin的過程,任何合格的分類損失函數都應該對margin<0的樣本施以較大的懲罰。

1、 0-1損失 (zero-one loss)

L(y,f(x)) = left{egin{matrix} 0 qquad if ;; yf(x)geq0 \ 1 qquad if ;; yf(x) < 0end{matrix}
ight.

0-1損失對每個錯分類點都施以相同的懲罰,這樣那些「錯的離譜「 (即 margin 
ightarrow -infty )的點並不會收到大的關注,這在直覺上不是很合適。另外0-1損失不連續、非凸,優化困難,因而常使用其他的代理損失函數進行優化。

2、Logistic loss

L(y,f(x)) = log(1+e^{-yf(x)})

logistic Loss為Logistic Regression中使用的損失函數,下面做一下簡單證明:

Logistic Regression中使用了Sigmoid函數表示預測概率:

g(f(x)) = P(y=1|x) = frac{1}{1+e^{-f(x)}}

P(y=-1|x) = 1-P(y=1|x) = 1-frac{1}{1+e^{-f(x)}} = frac{1}{1+e^{f(x)}} = g(-f(x))

因此利用 yinleft{-1,+1
ight} ,可寫為 P(y|x) = frac{1}{1+e^{-yf(x)}} ,此為一個概率模型,利用極大似然的思想:

? max(prod P(y|x)) = max(prod frac{1}{1+e^{-yf(x)}})

兩邊取對數,又因為是求損失函數,則將極大轉為極小:

max(sum logP(y|x)) = -min(sum log(frac{1}{1+e^{-yf(x)}})) = min(sum log(1+e^{-yf(x)})

這樣就得到了logistic loss。

如果定義 t = frac{y+1}2 in left{0,1
ight} ,則極大似然法可寫為:

prod (P(y=1|x))^{t}((1-P(y=1|x))^{1-t}

取對數並轉為極小得:

 sum [-tlog P(y=1|x) - (1-t)log (1-P(y=1|x))]?

上式被稱為交叉熵損失 (cross entropy loss),可以看到在二分類問題中logistic loss和交叉熵損失是等價的,二者區別只是標籤y的定義不同。

3、Hinge loss

L(y,f(x)) = max(0,1-yf(x))

hinge loss為svm中使用的損失函數,hinge loss使得 yf(x)>1 的樣本損失皆為0,由此帶來了稀疏解,使得svm僅通過少量的支持向量就能確定最終超平面。

4、指數損失(Exponential loss)

 L(y,f(x)) = e^{-yf(x)}

exponential loss為AdaBoost中使用的損失函數,使用exponential loss能比較方便地利用加法模型推導出AdaBoost演算法 。

AdaBoost推導?

zhuanlan.zhihu.com圖標

然而其和squared loss一樣,對異常點敏感,不夠robust。

5、modified Huber loss

 L(y,f(x)) = left {egin{matrix} max(0,1-yf(x))^2 qquad if ;;yf(x)geq-1 \ qquad-4yf(x) qquadqquad;; if;; yf(x)<-1end{matrix}
ight.qquad

modified huber loss結合了hinge loss和logistic loss的優點,既能在 yf(x) > 1 時產生稀疏解提高訓練效率,又能進行概率估計。另外其對於 (yf(x) < -1) 樣本的懲罰以線性增加,這意味著受異常點的干擾較少,比較robust。scikit-learn中的SGDClassifier同樣實現了modified huber loss。

最後來張全家福:

從上圖可以看出上面介紹的這些損失函數都可以看作是0-1損失的單調連續近似函數,而因為這些損失函數通常是凸的連續函數,因此常用來代替0-1損失進行優化。它們的相同點是都隨著 margin 
ightarrow -infty 而加大懲罰;不同點在於,logistic loss和hinge loss都是線性增長,而exponential loss是以指數增長。

值得注意的是上圖中modified huber loss的走向和exponential loss差不多,並不能看出其robust的屬性。其實這和演算法時間複雜度一樣,成倍放大了之後才能體現出巨大差異:

/

推薦閱讀:

數據挖掘有哪些常見的應用模型?
轉載 Mike Jordan - 人工智慧:革命尚未到來
自然語言分析加關係網路 - 半自動分析倚天屠龍記
3.機器學習演算法應用---演算法選擇
機器學習基石筆記1:基礎概念

TAG:機器學習 |