[ML學習筆記] XGBoost算法
##回歸樹
決策樹可用於分類和回歸,分類的結果是離散值(類別),回歸的結果是連續值(數值),但本質都是特征(feature)到結果/標簽(label)之間的映射。
這時候就沒法用信息增益、信息增益率、基尼系數來判定樹的節點分裂了,那么回歸樹采用新的方式是預測誤差,常用的有均方誤差、對數誤差等(損失函數)。而且節點不再是類別,而是數值(預測值),划分到葉子后的節點預測值有不同的計算方法,有的是節點內樣本均值,有的是最優化算出來的比如Xgboost。
##XGBoost算法
XGBoost是由許多CART回歸樹集成。區別於隨機森林的bagging集成,它是一種boosting集成學習(由多個相關聯的決策樹聯合決策,下一棵決策樹輸入樣本會與前面決策樹的訓練和預測相關)。它的目標是希望建立K個回歸樹,使得樹群的預測值盡量接近真實值(准確率)而且有盡量大的泛化能力(尋求更為本質的東西)。
記w為葉子節點的權值,x為分類結果,則最終預測值 \(\hat{y}_i = \sum_j w_j x_{ij}\)。
設目標函數為 \(l(y_i,\hat{y}_i)=(y_i-\hat{y}_i)^2\)。
對於一組數值需要求平均,相當於求其期望 \(F^*(\overrightarrow{x})=argminE_{(x,y)}[L(y,F(\overrightarrow{x}))]\)
最終結果由多個弱分類器組成,集成的結果:\(\hat{y}_i = \sum_{k=1}^K f_k(x_i), \quad f_k\in F\)
XGBoost本質是提升樹,也即每加一棵效果更好(目標函數更優)
定義正則化懲罰項 \(\Omega(f_t)=\gamma T+\frac{1}{2}\lambda \sum_{j=1}^T \omega_j^2\)(葉子個數 + w的L2正則項)
如何選擇每一輪加入什么f(預測值->落入的葉子權值):選取使得目標函數盡量最大地降低(找到\(f_t\)來優化這一目標)
用\(\hat{y}_i^{(t-1)}-y_i\) 描述前t-1棵的總預測值與真實值之間的差異(殘差),因此梯度提升決策樹也稱殘差決策樹。
目標函數Obj是一個隊樹結構進行打分的函數(結構分數 structure score),分數越小代表樹結構越好。用泰勒展開近似求解:
由對樣本的遍歷變換為對葉節點的遍歷
單節點怎么切分(分叉):枚舉所有可能的分割方案,假設要枚舉所有x<a這樣的條件,對於某個特性的分割a,分別計算切割前和分割后的差值以求增益。
推薦閱讀:
-
陳天奇博士的文章 Introduction to Boosted Trees (附:原PPT地址、中文筆記博客)