xgboost是華盛頓大學博士陳天奇創造的乙個梯度提公升(gradient boosting)的開源框架。至今可以算是各種資料比賽中的大殺器,被大家廣泛地運用。接下來,就簡單介紹一下xgboost和普通的gbdt相比,有什麼不同。(何為gradient boosting, gbdt請看我上篇文章)
1. 梯度下降
在gbdt中,我們每次生成下乙個弱學習器,都是把損失函式的梯度作為學習目標,相當於利用梯度下降法進行優化來逼近損失函式的最小值,也就是使得損失函式為0,最終學習器盡可能接近真實結果。
而xgboost中,我們則是把損失函式的二階泰勒展開的差值作為學習目標,相當於利用牛頓法進行優化,來逼近損失函式的最小值,也就是使得損失函式為0。
那為什麼可以這麼逼近呢?這就涉及到泰勒展開:
梯度下降法就是用一階泰勒展開來近似函式:
而牛頓法則是用二階泰勒展開來近似函式:
之後具體的迭代收斂原理請看最優化方法。
2. 正則項
正則項是為了防止模型過擬合。於是,一般的損失函式
就變成了目標函式
。這樣,隨著樹的複雜度增大,對應的目標函式也就變大,這樣就有效防止了過擬合。葉子節點個數(t),葉節點分數(w)
對葉子節點個數進行懲罰,相當於在訓練過程中做了剪枝。
將xgboost的目標函式進行化簡,並把
決策樹和
代入:令 其導數為0,解得每個葉節點的最優**分數為:
代入目標函式,得到最小損失為:
3. 樹節點**方法
精確演算法:遍歷所有特徵的所有可能分割點,來尋找使目標函式最小的分割點。
近似演算法:對於每個特徵,只考察分位點,減少計算複雜度。
而xgboost不是簡單地按照樣本個數進行分位,而是以二階導數值作為權重(weighted quantile sketch),比如:
4. 其他特徵shrinkage(收縮)方法:相當於學習係數eta。對每顆子樹都要乘上該係數,防止過擬合。
行取樣:
缺失值處理:通過列舉所有缺失值在當前節點是進入左子樹,還是進入右子樹更優來決定乙個處理缺失值預設的方向。
xgboost工具支援並行。一般決策樹中,我們需要每次都對特徵的值進行排序,來尋找分割點,極其費時。xgboost中,我們先對每個特徵進行分塊(block)並排序,使得在尋找最佳**點的時候能夠並行化計算。這個結構加速了split finding的過程,只需要在建樹前排序一次,後面節點**時直接根據索引得到梯度資訊。這是xgboost比一般gbdt更快的乙個重要原因。
out-of-core, cache-aware優化記憶體等方法來加速計算。
xgboost簡單介紹 XGBOOST模型介紹
前言 這是機器學習系列的第三篇文章,對於住房租金 比賽的總結這將是最後一篇文章了,比賽持續乙個月自己的總結竟然也用了乙個月,牽強一點來說機器學習也將會是乙個漫長 的道路,後續機器學習的文章大多數以知識科普為主,畢竟自己在機器學習這個領域是個 渣渣,自己學到的新知識點會分享給大家的。前面的文章談了談這...
Xgboost引數介紹
xgboost是boosting演算法的一種,是多個表現一般的學習器結合成的強分類器。在目標函式上,增加了結構風險,也就是正則化項,l1和l2正則,l1是樹葉子節點個數,l2是葉子節點打分的平方 在目標函式的優化上,採用二階泰勒展開,使用了二階導數,然後令偏導等於0,於是就可以計算出每乙個葉子節點的...
mysql的簡單介紹 mysql的簡單介紹
mysql的簡單介紹 資料庫的內部鏈結 1 連線管理器 使用者或應用程式連線 2 分析器 3 快取區4 優化器 優化器執行的結果交由儲存引擎,再轉向物理層 表空間 myisam每個表有三個檔案 frm 表結構 myd 表資料 myi 表索引 innodb 所有表空間再乙個檔案 資料庫失敗的原因 1 ...