1. 程式人生 > >損失函式與梯度提升樹

損失函式與梯度提升樹

上一篇文章簡單介紹了幾種整合方法,以隨機森林為代表的平均方法,以adaboost、提升樹為代表的提升方法。本文繼續提升樹的討論,採用梯度提升演算法,分析更一般的損失函式下的分類、迴歸問題。首先介紹幾種在機器學習演算法中常見的損失函式,繼而介紹GBDT演算法。

1、 損失函式

1.1、 分類問題損失函式

在二分類中把

m=yf(x)稱為margin。當m<0時則說明誤分類。基於此,下面介紹幾種常見的分類損失函式。

1.1.1、 0-1損失

表示式為:

L01(m)=I(sign(f)y)
或者
L01(m)={0,m01,m<0
即只對誤分類樣本進行懲罰,類似有後列幾種損失。

1.1.2、 指數損失

表示式:

Le=exp(yf)
Adaboost演算法就是用的此種損失函式。在上一篇文章中有介紹。

1.1.3、 log損失

表示式:

Ll=log(1+exp(yf))
在邏輯迴歸中用到的損失函式。

1.1.4、均方損失

表示式:

L2=(yf)2

1.1.5、hinge損失

表示式:

Lh=(1yf)+
在支援向量機中使用。

1.1.6、偏差損失函式

考慮K分類問題,假設在第k類的概率:

pk(x)=exp(fk(x))Kl=1exp(fl(x))
則多項式偏差:
L(y,p(x))=k=1KI(y=gk)logpk(x)=k=1K
I(y=gk)fk(x)+log(k=1Kexp(fl(x)))

在gbdt分類中預設使用此損失函式。

1.2、 迴歸問題損失函式

下面介紹三種迴歸問題中常見的的損失函式。

1.2.1、 均方損失

表示式:

L(y,f(x))=(yf(x))2

1.2.2、絕對損失

表示式:

L(y,f(x))=|yf(x)|

1.2.3、Huber 損失

表示式:

L(y,f(x))={(yf(x))2,|yf(x)|δ2δ(|yf(x)|δ2),otherwise
Huber損失相對於前兩種損失更具有魯棒性。

2、 GBDT演算法

上篇文章已經介紹,當分類問題是指數損失,迴歸問題是均方損失時,用提升樹演算法很簡單。當損失函式更為一般時,可以使用梯度提升的方法快速迭代,即為GBDT演算法。在R中的包名為gbm,在python中的sklearn.ensemble目錄下對應GradientBoostingRegressor和GradientBoostingClassifier。

2.1、 分類問題

GBDT在分類中的損失函式可選偏差損失和指數損失,預設是偏差損失,當選擇指數損失時則還原為adaboost演算法。前文已經介紹這兩種損失,主要介紹偏差損失下K分類演算法。

根據偏差損失:

pk(x)=exp(fk(x))Kl=1exp(fl(x))
L(y,p(x))=k=1KI(y=gk)logpk(x)=k=1KI(y=gk)fk(x)+log(k=