[ML學習筆記] XGBoost算法

[ML學習筆記] XGBoost算法


迴歸樹

決策樹可用於分類和迴歸,分類的結果是離散值(類別),迴歸的結果是連續值(數值),但本質都是特徵(feature)到結果/標籤(label)之間的映射。html

這時候就無法用信息增益、信息增益率、基尼係數來斷定樹的節點分裂了,那麼迴歸樹採用新的方式是預測偏差,經常使用的有均方偏差、對數偏差等(損失函數)。並且節點再也不是類別,而是數值(預測值),劃分到葉子後的節點預測值有不一樣的計算方法,有的是節點內樣本均值,有的是最優化算出來的好比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}))]\)spa

最終結果由多個弱分類器組成,集成的結果:\(\hat{y}_i = \sum_{k=1}^K f_k(x_i), \quad f_k\in F\)htm

XGBoost本質是提高樹,也即每加一棵效果更好(目標函數更優)blog

定義正則化懲罰項 \(\Omega(f_t)=\gamma T+\frac{1}{2}\lambda \sum_{j=1}^T \omega_j^2\)(葉子個數 + w的L2正則項)get

如何選擇每一輪加入什麼f(預測值->落入的葉子權值):選取使得目標函數儘可能最大地下降(找到\(f_t\)來優化這一目標)博客

\[ \begin{split} Obj^{(t)}&=\sum_{i=1}^n l(y_i,\hat{y}_i^{(t)})+\sum_{i=1}^n\Omega(f_i)\\ &=\sum_{i=1}^n l(y_i,\hat{y}_i^{(t-1)}+f_t(x_i))+ \Omega(f_t)+constant\\ &=\sum_{i=1}^n (y_i-(\hat{y}_i^{(t-1)}+f_t(x_i))^2+ \Omega(f_t)+constant\\ &=\sum_{i=1}^n [2(\hat{y}_i^{(t-1)}-y_i)f_t(x_i)+f_t(x_i)^2]+ \Omega(f_t)+constant\\ \end{split} \]

\(\hat{y}_i^{(t-1)}-y_i\) 描述前t-1棵的總預測值與真實值之間的差別(殘差),所以梯度提高決策樹也稱殘差決策樹。

目標函數Obj是一個隊樹結構進行打分的函數(結構分數 structure score),分數越小表明樹結構越好。用泰勒展開近似求解:

由對樣本的遍歷變換爲對葉節點的遍歷

單節點怎麼切分(分叉):枚舉全部可能的分割方案,假設要枚舉全部x<a這樣的條件,對於某個特性的分割a,分別計算切割前和分割後的差值以求增益。


推薦閱讀:

相關文章
相關標籤/搜索