XGboost學習總結


XGboost,全稱Extrem Gradient boost,極度梯度提升,是陳天奇大牛在GBDT等傳統Boosting算法的基礎上重新優化形成的,是Kaggle競賽的必殺神器。

XGboost屬於集成學習的模型,在集成學習中主要有三個算法,Bagging,Boosting和Stacking,Bagging算法的優秀代表是RF(隨機森林),Boosting算法的優秀代表有

Adaboosing,GBDT和XGboost,Stacking算法貌似沒有什么優秀的代表,算是一種集成的思想,在Kaggle競賽中用的比較多。

先來說一說XGboost的優點,用過的人就知道,它哪里都是優點。

1.損失函數

機器學習中常用的損失函數主要有:指數損失,合頁損失,零一損失,交叉熵損失,平方損失等等,XGboost這方面有幾個好處,首先XGboost可以自定義損失函數,你可以選擇以上常用的損失函數,也可以根據實際問題的具體情況自定義損失函數,提供了極大的靈活性,對於解決實際問題非常有幫助;其次,在優化損失函數時,XGboost用泰勒公式對目標損失函數進行展開,二階求導,一方面更加准確,另一方面將損失函數本身和優化方法分離開,可以在事先不指定具體的損失函數的情況下進行目標函數的優化,具有極大的靈活性。

 

2.正則化

XGboost在目標損失函數后面加了一個自定義的正則化項,這個正則化項是自定義的樹的復雜度,正則項里包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和,這樣做有效的控制了模型的復雜度。

 

3.Shrinkage(縮減)

Shrinkage(縮減)相當於學習速率(xgboost中的eta)。xgboost在進行完一次迭代后,會將葉子節點的權重乘上該系數,主要是為了削弱每棵樹的影響,讓后面有更大的學習空間。實際應用中,一般把eta設置得小一點,然后迭代次數設置得大一點。

 

4.列采樣

xgboost借鑒了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性

 

5.支持並行計算

XGboost在訓練每一棵樹的時候,是迭代式訓練,是線性的,這是無法做到並行計算的,但是訓練一棵樹最費時間的是進行節點分裂時計算每個屬性的增益,以及每一個屬性的最佳切割點,XGboost在計算最佳分裂屬性和最佳切割點時可以調用CPU進行多線程的並行計算,極大的節約了時間,加速了訓練過程。

 

6.支持確實值的處理

對缺失值的處理,對於特征的值有缺失的樣本,xgboost可以自動學習出它的分裂方向

 

7.非貪心算法

XGboost在確定最佳切割點時,並沒有采用傳統的貪心算法遍歷每一個可能的分割點,而是先篩選出一個候選集和,然后在候選集合中確定最佳切割點。

。。。。。,當然還有別的,這里就不一一列舉了。

 

在使用工具方面,XGboost可以和sklearn結合使用,xgboost可以接收普通的numpy數組形式的特征矩陣,也可以接收libsvm形式的稀疏距陣的壓縮格式,當特征距陣比較稀疏時,后者更加節約內存空間。

對於libsvm格式的文件,sklearn工具調用如下:

from sklearn.datasets import load_svmlight_file

load_svmlight_file(my_workpath + 'agaricus.txt.train')

xgboost調用如下:xgb.Dmatrix(路勁)

模型可視化工具:xgb.to_graphviz(model,num_trees)(前提是系統安裝了graphviz軟件)

參數選擇和調優:k折交叉驗證和網格索搜:GridSearchCV

防止過擬合:earlystop,集成學習,正則化,交叉驗證,增強數據

bst.fit(X_train_part, y_train_part, early_stopping_rounds=100, eval_metric="error",
eval_set=eval_set, verbose=True),可以看到,隨着在訓練集上迭代次數的增多,所得模型在測試集 上的性能的變化,是否發生過擬合的情況。

data.isnull().sum():統計所有特征關鍵字非空的的數目

data['class'].unique():某一列特征有多少種取值

以下:根據特征重要性畫圖

from xgboost import plot_importance
plot_importance(model_XGB)
pyplot.show()


免責聲明!

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



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