xgboost是在gbdt上進行改進的模型,其主要的特點是做了下面的工作,對了樹每次做**候選時,是使用的gain增益,而不是普通的gini指數或者均方差,是一種優化過的誤差計算.....:
(1)將樹模型的複雜度加入到正則項中,參與到損失函式,來避免過擬合問題。 (葉子打分就是**值,分類問題是給的概率)
(2)對損失函式進行了優化,優化成了二階泰勒展開形式,同時使用了一階導和二階導,加速了優化速度。【這裡只是損失函式優化,使用的損失函式還是自己定的,logloss等損失吧】
(3)相比於gbdt只支援cart作為基分類器的方式,xgboost還支援線性分類器,在使用線性分類器時候可以使用l1正則化和l2正則化。【看到objective引數下可選 線性回歸、邏輯回歸等選項】
(4)引入了特徵子取樣【就是取樣一部分特徵作為每棵樹的構建】,類似於rf那樣,這樣可以降低過擬合。
(5)在尋找最佳分割點時,使用了一種預排序的機制,特徵列排序後以塊狀儲存, 對所有特徵都按照特徵數值進行預排序,在第一次遍歷時存起來,之後再遍歷分割點時候用o(data)的代價找到特徵上的最好分割點【儲存的是按特徵分割所帶來的增益】,這個預先排序的資料,會儲存在block結構中,之後的迭代時反覆使用這一結構,能夠大大減小計算量。 同時這也是實現並行化的重要支援。
(6)xgboost可以自動對特徵值樣本處理,對於有缺失的樣本,可以自動找到要**的方向 【把缺失值當做一種型別使用】,方法就是將缺失值資料分別分到左子樹和右子樹中分別計算損失,選擇最優的那個,這樣在訓練時候嘗試該怎麼分,在測試時直接按照經驗最優分即可 【對了,其不支援離散型特徵,需要自己做處理,但是lightgbm分箱的機制是支援的】
(7)xgboost支援平行計算,其並行不是模型上的並行,而是特徵上的並行【處理單個特徵時可以做到】, 將特徵列排序後以block形式放到記憶體中,之後重複使用這一結構。 boosting方法必須序列,但是在處理每個特徵列時是可以並行的。 就是每個特徵列下候選分割點的gain增益計算
(8)使用shrinkage縮減的方法,相對於對學習率的設定,xgboost在進行玩一次迭代後,會將葉子結點的權重乘該係數,主要是削弱每棵樹的影響,放置過擬合,實際使用時候,剛開始會設定的大一些,之後迭代次數多了時候會設定小一些。
(9)相比於 id3使用資訊增益、c4.5使用資訊增益比、cart樹使用gini指數、xgboost主要使用的計算**前後的增益使用的是打分函式, 以打分函式計算每個葉子節點做總體誤差的貢獻,我們需要誤差越
小越好,所以每次做葉子**時,都是 計算**前後根據打分函式得到gain增益值,gain值越大,**後l減少的越多。 這裡有個疑問,每棵樹葉子節點計算殘差時還和之前一樣嗎,應該不是一樣的,應該是一種結合到原目標函式、 後面的拉姆塔是結構代價
(10)xgboost並不是完全的貪心尋找最佳分割點的方法,而是使用了一種近似的方法,其思想是根據百分位法列舉幾個可能成為分割點的候選者,在候選者基礎上找到最佳的分割點,提公升效率。
(11)支援自定義loss 損失函式【注意,是loss,是目標函式中的l部分】,只要能夠一階和二階泰勒展開即可。 另外在打分函式推導推導時的w是最優化求出來的,而不是平均值或者規則
xgboost與GBDT區別 優勢
傳統gbdt以cart作為基分類器,xgboost還支援線性分類器,這個時候xgboost相當於帶l1和l2正則化項的邏輯斯蒂回歸 分類問題 或者線性回歸 回歸問題 傳統gbdt在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboo...
xgboost與GBDT區別 優勢
傳統gbdt以cart作為基分類器,xgboost還支援線性分類器,這個時候xgboost相當於帶l1和l2正則化項的邏輯斯蒂回歸 分類問題 或者線性回歸 回歸問題 傳統gbdt在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboo...
GBDT和XGBOOST的區別
陳天奇的xgboost在kaggle中大放異彩,下面講解gbdt和xgboost的區別 com question 41354392xgboost使用小案例 net hb707934728 article details 70739040分類和回歸樹的學習見李航的統計學習方法cart gbdt和xgb...