GBDT不錯的文章

2021-09-27 03:24:23 字數 1257 閱讀 4359

gbdt

特徵重要性

xgboost1

xgboost2

xgboost3

xgb預排序

xgboost和lightgbm

xgboost和lightgbm

xgboost和lightgbm

lightgbm

lightgbm

lightgbm

內含兩者直方圖方法的差異

一、xgboost的優良特性

1、gbdt是以cart為基分類器,但xgboost在此基礎上還支援線性分類器,此時xgboost相當於帶l_1和l_2正則化項的logistics回歸(分類問題)或者線性回歸(回歸問題)

2、xgboost在目標函式裡加入了正則項,用於控制模型的複雜度。正則項裡包含了樹的葉子節點個數和每棵樹葉子節點上面輸出分數的l_2模平方。從偏差方差權衡的角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合

3、傳統的gbdt在優化時只用到一階導數,xgboost則對目標函式進行了二階泰勒展開,同時用到了一階和二階導數。(順便提一下,xgboost工具支援自定義代價函式,只要函式可一階和二階求導)

4、樹節點在進行**時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法列舉所有可能的分割點。當資料無法一次載入記憶體或者在分布式情況下,貪心演算法效率就會變得很低,所以xgboost採用了一種近似的演算法。大致的思想是根據百分位法列舉幾個可能成為分割點的候選者,然後從候選者中根據上面求分割點的公式計算找出最佳的分割點

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

6、特徵列排序後以塊的形式儲存在記憶體中,在迭代中可以重複使用;雖然boosting演算法迭代必須序列,但是在處理每個特徵列時可以做到並行

7、列抽樣(column subsampling):xgboost借鑑了隨機森林的做法,支援列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的乙個特性

8、除此之外,xgboost還考慮了當資料量比較大,記憶體不夠時怎麼有效的使用磁碟,主要是結合多執行緒、資料壓縮、分片的方法,盡可能的提高演算法效率

cart的m引數是最終的葉子節點個數,其中只有葉子節點才會用樣本均值作為**值,內部節點處樣本的均值只是作為選擇最佳屬性和**值的輔助。

參考

不錯的文章

1,人生最重要的不是努力,不是奮鬥,而是抉擇。2,老闆只能給乙個位置,不能給乙個未來。舞台再大,人走茶涼。3,意外和明天不知道哪個先來。沒有危機是最大的危機,滿足現狀是最大的陷阱。4,所見所聞改變一生,不知不覺斷送一生。5,生意,可以掌控努力與投資,卻無法掌控結果。人生得意時找出路,失意時才有退路,...

不錯的文章

自1999年起我就開始發掘一些科技公司,並幫助它們運營。我最近的乙個公司是fabulis.com。下面是從幹這行中得到的57條經驗。我可以列出更多,但恐怕會令你厭煩。1.做你個人有熱情的事情。你是你自己最好的民意代表。2.使用者體驗很重要。大多數產品做不到這些是因為使用者弄不清怎樣才能從這些產品中獲...

幾篇不錯的socket文章

proxy源 分析 談談如何學習linux網路程式設計 2001 08 10 12 00 00 linux網路程式設計 10.原始套接字 11.後記 2001 05 08 11 26 09 linux網路程式設計 9.伺服器模型 2001 05 08 11 23 59 linux網路程式設計 8.套...