接下來要介紹的是數據競賽中最常見到的兩個模型,xgboost以及lightgbm。這兩個模型都是基於前一篇文章所提到的Boosting演算法,基於決策樹來形成的一種整體學習。
要詳細介紹兩者的差別,我們需要先簡單介紹一下決策樹是怎麼「剪枝」的。
決策樹有一個非常重要的後處理過程,為了避免無用的節點過多,導致對樣本過擬合,因此決策樹會針對較無用的節點進行剪枝,這個較無用的節點是根據以下的標準來評斷。
不純度是分類好壞的一個衡量標準,藉由節點分類之後群體的不純度下降,作為分裂節點的基準。
當節點分裂後,母節點與子節點可以進行不純度的比較,若是不純度下降,表示這個節點的資訊增益為正,而資訊增益越大越好。
當每個節點有著資訊增益的具體數值可以計算之後,就可以來評估這個分裂該不該保留,因為越複雜的模型容易導致過擬合,並且預測速度也會較慢,因此適當的剪枝是必要的。在xgboost當中,參數gamma即是調整資訊增益大小的項目,越高則表示剪枝越嚴格,越低則會保留更多節點,預測值為0。
介紹完剪枝之後,我們就可以來了解兩者之間最主要的差異「訓練速度」,同樣是相對耗時的boosting演算法,兩者的訓練速度可以差距非常大,其中有個原因就是因為剪枝。
xgboost採取先生長所有特徵之後再回頭剪枝,遍歷所有特徵所以會導致生長速度緩慢。
lightgbm則是針對資訊增益大的特徵,先將葉子生長到指定深度再回頭剪枝,較容易過擬合但是速度較快。
參考資料
這兩個模型並沒有在scikit-learning的套件當中,要使用這兩個模型要另外安裝xgboost以及lightgbm兩個套件。
在這裡也教使用者使用一個較迅速安裝套件的方法,不必每次都要開啟anaconda進行套件的安裝
!pip install xgboost # 安裝 xgboost
!pip install lightgbm # 安裝 lightgbm
使用模型則與之前所使用的十分類似,但有相對較複雜的使用方法,這裡僅示範與之前相同的模式。
from xgboost import XGBRegressor
xgbr = XGBRegressor()
xgbr.fit(dummies,data.target)