損失函式與梯度提升樹
阿新 • • 發佈:2019-02-01
上一篇文章簡單介紹了幾種整合方法,以隨機森林為代表的平均方法,以adaboost、提升樹為代表的提升方法。本文繼續提升樹的討論,採用梯度提升演算法,分析更一般的損失函式下的分類、迴歸問題。首先介紹幾種在機器學習演算法中常見的損失函式,繼而介紹GBDT演算法。
1、 損失函式
1.1、 分類問題損失函式
在二分類中把
1.1.1、 0-1損失
表示式為:
或者
即只對誤分類樣本進行懲罰,類似有後列幾種損失。
1.1.2、 指數損失
表示式:
Adaboost演算法就是用的此種損失函式。在上一篇文章中有介紹。
1.1.3、 log損失
表示式:
在邏輯迴歸中用到的損失函式。
1.1.4、均方損失
表示式:
1.1.5、hinge損失
表示式:
在支援向量機中使用。
1.1.6、偏差損失函式
考慮K分類問題,假設在第k類的概率:
則多項式偏差:
在gbdt分類中預設使用此損失函式。
1.2、 迴歸問題損失函式
下面介紹三種迴歸問題中常見的的損失函式。
1.2.1、 均方損失
表示式:
1.2.2、絕對損失
表示式:
1.2.3、Huber 損失
表示式:
Huber損失相對於前兩種損失更具有魯棒性。
2、 GBDT演算法
上篇文章已經介紹,當分類問題是指數損失,迴歸問題是均方損失時,用提升樹演算法很簡單。當損失函式更為一般時,可以使用梯度提升的方法快速迭代,即為GBDT演算法。在R中的包名為gbm,在python中的sklearn.ensemble目錄下對應GradientBoostingRegressor和GradientBoostingClassifier。
2.1、 分類問題
GBDT在分類中的損失函式可選偏差損失和指數損失,預設是偏差損失,當選擇指數損失時則還原為adaboost演算法。前文已經介紹這兩種損失,主要介紹偏差損失下K分類演算法。
根據偏差損失: