XGBoost和LightGBM

這兩個模型都屬於集成學習中的樹模型,每個機器學習模型都有它特定的應用場景,不同的數據集適合用到的模型是不一樣的。

結構化數據、非結構化數據

  1. 結構化數據:規整,維度固定;一般我們的表格數據都屬於結構化數據。
  2. 非結構化數據:非規整,維度不固定;比如說一些文本、圖像、音頻、視頻等

結構化數據的特點

  1. 類別字段較多
  2. 聚合特徵較多

對於結構化數據集,如果我們遇到的數據集有很多類別類型的特徵,而且特徵與特徵之間是相互獨立的,非常適合使用樹模型。

XGBoost

提出時間較早的高階樹模型,精度較好。比隨機森林較晚,比LightGBM、Catboost較早。

缺點:訓練時間較長,對類別特徵支持不友好。

接口:scikit-learn接口和原聲接口。

XGBoost是基於GBDT(Gradient Boosting Decision Tree)的一種算法模型有關Gradient Boosting的介紹可以參考機器學習算法整理(四)

XGBoost首先是樹模型,Xgboost就是由很多CART樹集成。一般有分類樹和迴歸樹,分類樹是使用數據集的特徵(維度)以及信息熵或者基尼係數來進行節點分裂。對於迴歸樹則無法使用信息熵和基尼係數來判定樹的節點分裂,包括預測誤差(常用的有均方誤差、對數誤差等)。而且節點不再是類別,是數值(預測值),那麼怎麼確定呢?有的是節點內樣本均值,有的是最優化算出來的比如XGBoost。

CART迴歸樹是假設樹爲二叉樹,通過不斷將特徵進行分裂。比如當前樹結點是基於第j個特徵值進行分裂的,設該特徵值小於s的樣本劃分爲左子樹,大於s的樣本劃分爲右子樹。

而CART迴歸樹實質上就是在該特徵維度對樣本空間進行劃分,而這種空間劃分的優化是一種NP難問題,因此,在決策樹模型中是使用啓發式方法解決。典型CART迴歸樹產生的目標函數爲:

因此,當我們爲了求解最優的切分特徵j和最優的切分點s,就轉化爲求解這麼一個目標函數:

所以我們只要遍歷所有特徵的的所有切分點,就能找到最優的切分特徵和切分點。最終得到一棵迴歸樹。

我們之前在Gradient Boosting的介紹中說,每次訓練出一個模型m後會產生一個錯誤e,這個錯誤就是殘差。GBDT是計算負梯度,用負梯度近似殘差。迴歸任務下,GBDT 在每一輪的迭代時對每個樣本都會有一個預測值,此時的損失函數爲均方差損失函數

此時的負梯度

所以,當損失函數選用均方損失函數是時,每一次擬合的值就是(真實值 - 當前模型預測的值),即殘差。此時的變量是,即“當前預測模型的值”,也就是對它求負梯度。殘差在數理統計中是指實際觀察值與估計值(擬合值)之間的差。“殘差”蘊含了有關模型基本假設的重要信息。如果迴歸模型正確的話, 我們可以將殘差看作誤差的觀測值。GBDT需要將多棵樹的得分累加得到最終的預測得分,且每一次迭代,都在現有樹的基礎上,增加一棵樹去擬合前面樹的預測結果與真實值之間的殘差。

XGBoost與gbdt比較大的不同就是目標函數的定義。XGBoost的目標函數如下圖所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章