機器學習筆記 xgboost核心思想

2021-10-10 06:45:21 字數 1502 閱讀 4334

今天給大家講xgboost,這是乙個非常優秀的演算法,在各大回歸類的人工智慧競賽中,經常可以在榜首看到這個演算法的身影。

前面我們已經講了決策樹,提公升樹(boostingdecision tree)是迭代多棵決策樹來共同決策,當採用平方誤差作為損失函式的時候,每一棵樹學習的是之前所有樹之和的殘差值,殘差=真實值-**值。

比如a的年齡是18歲,第一棵樹的**值是13歲,與真實值相差了5歲(就是我們說的殘差),那麼第二棵樹的**目標就是5歲,如果第二棵樹的**結果是5歲,那麼兩棵樹的**值相加就是18歲,即a的真實年齡。如果第二棵樹的**值是4歲,那麼兩棵樹**值相加是17歲,與真實值殘差1歲,繼續學。

梯度提公升樹gbdt是一種更廣泛的boosting演算法,當損失函式是平方損失和指數損失的時候,每一步優化是很簡單的,但對一般損失函式而言,往往每一步優化沒那麼容易,比如絕對值損失函式和huber損失函式。

更一般地說,使得損失函式最小化的方法,就是調整引數,使得損失沿著梯度方向下降。(不懂就去翻周志華的西瓜書)。

xgboost除了對gbdt演算法進行修改以外,還在【工程上】做了大量的優化,使得xgboost演算法在準確性和運算速度上都比gbdt有了很大提公升,真正實現了又快又準。。。

演算法上的優化:

xgboost在代價函式裡加入了正則項,用於控制模型得複雜度,降低了過擬合的可能性。正則項裡包含了樹的葉子節點的個數、每個葉子節點上輸出的score的l2模的平方和。

列抽樣。xgboost借鑑了隨機森林的做法,支援列抽樣,不僅防止過擬合,還能減少計算;

對缺失值的處理。對於特徵的值有缺失的樣本,xgboost還可以自動學習出它的**方向;

節點**的方式不同,gbdt是用gini係數,xgboost是經過優化推導後的。

傳統的gbdt在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數,二階導數有利於梯度下降的更快更準。使用泰勒展開取得函式做自變數的二階導數形式,可以在不選定損失函式具體形式的情況下,僅僅依靠輸入資料的值就可以進行葉子**優化計算,本質上也就把損失函式的選取和模型演算法優化/引數選擇分開了,這種去耦合增加了xgboost的適用性,使得它按需選取損失函式,可以用於分類,也可以用於回歸

工程上的優化:

xgboost工具支援並行。注意xgboost的並行並不是tree粒度的並行,xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的乙個步驟就是對特徵值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對資料進行了排序,然後儲存為block結構,後面的迭代中重複的使用這個結構,大大減小計算量。這個block結構也使得並行成為可能,在進行節點的**時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做**,那麼各個特徵的增益計算就可以開多執行緒進行。

有效利用硬體資源。這是通過在每個執行緒中分配內部緩衝區來儲存梯度統計資訊來實現快取感知來實現的。

看了陳天奇的演算法優化,我懂了乙個道理,要想演算法搞得好,軟體硬體都得懂。。。。

python 裡已經有了封裝好的xgboost,我們不需要自己造輪子,直接用命令pip install xgboost安裝即可。

機器學習 xgboost

xgb中引數分為三類 1.通用引數 2.整合引數 3.任務引數 1 隨機森林在ligthgbm 有很多整合演算法 中有,裡面更全。2 xgboost 裡面有gdbt是樹的串型疊加的各種包,梯度增強的方法 裡面沒有隨機森林包。xgboost是乙個支援多種資料格式的庫。libsvm資料儲存格式,xgbo...

機器學習 Xgboost 對比

引數解釋 實戰 原理 調參步驟 對比 這篇寫的比較好。eta學習率的解釋 你可以是幾個回歸樹的葉子節點之和為 值,也可以是加權,比如第一棵樹 值為3.3,label為4.0,第二棵樹才學0.7,再後面的樹還學個鬼,所以給他打個折扣,比如3折,那麼第二棵樹訓練的殘差為4.0 3.3 0.3 3.01,...

python機器學習 xgboost簡介

boosting 分類器屬於整合學習模型,它基本思想是把成百上千個分類準確率較低的樹模型組合起來,成為乙個準確率很高的模型。這個模型會不斷地迭代,每次迭代就生成一顆新的樹。對於如何在每一步生成合理的樹,大家提出了很多的方法,我們這裡簡要介紹由 friedman 提出的 gradient boosti...