[ML學習筆記] XGBoost算法


[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\)來優化這一目標)

\[\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,分別計算切割前和分割后的差值以求增益。


推薦閱讀:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM