標籤:資料科學 情境 flv alt fnr 決策樹 strong 能力 margin
“Young man, in mathematics you don’t understand things. You just get used to them.”
XGBoost(eXtreme Gradient Boosting)演算法是Gradient Boosting演算法的高效實現版本,因其在應用實踐中表現出優良的效果和效率,因而也被工業界廣為推崇。
想要瞭解XGBoost演算法的原理,首先需要理解Boosting演算法。簡單來說,Boosting演算法是將個體學習器整合為更複雜學習器的機器學習方法,它更強調個體學習器之間存在強依賴關係,因此也可認為是串列整合學習方法。相比下,Bagging演算法則屬於並行整合學習方法。
Boosting演算法的基本原理是:首先用初始樣本訓練一個基學習器,根據學習表現對樣本分布進行調整,使得表現差的樣本獲得更多的關注,然後不斷迭代用調整分布後的樣本訓練下一個基學習器,直到基學習器數量達到指定數目。
Boosting演算法族中最著名的即是Freund於1997年提出的AdaBoost演算法,可將其理解為“加性模型”,即最終的學習器為t個基學習器的“加權和”模型,每次使用訓練錯誤的樣本訓練新的基學習器,並通過權重調整降低之前表現不佳的學習器的影響,最終降低整合學習器的結果偏差。
2001年,Freund又提出了Gradient Boosting架構,將損失函數擴充到更一般的情況,即通過梯度計算迴歸擬合的殘差(準確應稱之為偽殘差),基於該殘差產生新的基學習器,並計算其最優的疊加權重值。如果選擇基分類器為決策樹(如CART樹),則對應為GBDT演算法。
CART樹是分類樹,並不滿足GB迴歸損失函數的要求,因此需要將分類GINI係數指標替換為最小均方差,即當所有分枝的預測結果唯一或是達到分葉節點數量上限時,以該樹所有節點的預測均值作為該分類器的預測結果。此外,GBDT還借鑒了Bagging整合學習的一些思想,例如通過隨機抽樣提高模型的泛化能力,通過交叉驗證選擇最優參數等。
2014年,陳天奇博士提出了XGBoost演算法,它可認為是在GBDT演算法基礎上的進一步最佳化。首先,XGBoost演算法在基學習器損失函數中引入了正則項,控制減少訓練過程當中的過擬合;其次,XGBoost演算法不僅使用一階導數計算偽殘差,還計算二階導數可近似快速剪枝的構建新的基學習器;此外,XGBoost演算法還做了很多工程上的最佳化,例如支援並行計算、提高計算效率、處理稀疏訓練資料等等。
綜上分析,XGBoost演算法源起於Boosting整合學習方法,在演化過程中又融入了Bagging整合學習方法的優勢,通過Gradient Boosting架構自訂損失函數提高了演算法解決通用問題的能力,同時引入更多可控參數即可針對問題情境進行最佳化,最後通過工程實現方面細節最佳化,在保證演算法結果穩定的同時還可高效處理大規模資料,可擴充支援不同程式設計語言。這些因素共同使它成為了工業界的主流機器學習演算法之一。
對XGBoost演算法意猶未盡的朋友,可在資料小蝦米公眾號後台回複關鍵字“xgboost”,下載陳天奇博士的論文PPT細細品味。
資料科學武林風起雲湧,
隨資料小蝦米共闖江湖~
?
XGBoost演算法原理簡析