騰訊angel中實現的GBDT解析

2021-08-19 06:05:06 字數 1150 閱讀 2704

看了**《tencentboost: a gradient boosting tree system with parameter server》,主要從以下三個方面闡述**思想:

一 ,woker端的工作(其中有乙個節點是leader worker主要負責sample features,合併梯度圖):

1.每個worker根據分配到的資料,統計部分特徵的分位圖,然後把統計的分位圖push到server上。

2. 從server上pull下全部特徵的分位圖,根據分位圖確定候選特徵值。

3. 每個worker初始化樹結構,並選定乙個根節點為active。leader worker選取一些特徵push到server上。

4. worker從server上pull下來選取的特徵,為active node計算梯度圖。把計算好的梯度直方圖push給server。

5. leader worker從server端pull下所有的梯度圖,計算最佳切分點,並push給server。

6. worker從server上pull下最佳切分點,根據最佳切分點,劃分子樹,並置已選節點為unactive。然後開始下一輪的計算梯度圖,直至已滿足樹的深度。

二,server端工作:

1.儲存方式:用vector儲存,對於稀疏資料則之間儲存非零值的索引。

2.引數空間的劃分:range-hash混合儲存。先根據索引劃分幾個範圍,每個範圍內通過雜湊對映確定每個伺服器負責的引數範圍。

三,網路結構優化

1為計算最佳切分點是高維操作,僅僅由leader worker乙個節點計算效率太低,為了加快獲得最佳切分點的速度,有兩個地方可以優化。

(1)針對worker端 round-robin work partition。採用輪詢策略,確定每個worker所負責的候選特徵值。每個woker在自己所負責的特徵值內,尋找最佳特徵切分值。

(2) 針對server端 sparse pull。假設有p個分割槽,每個分割槽中含有k個特徵,通過pull操作迴圈依次獲取每個特徵的梯度圖,以確定這k個特徵的最佳切分點。將結果以split feature/split value/gain的向量形式傳遞給worker。worker獲得p個最佳值後,再從這p個特徵值中選擇乙個最佳切分點最為最終的結果。(本質上是分而治之的思想)從而節約了資料儲存以及資料傳輸。

針對**裡面的實驗結果,很多人有爭議,可以檢視這裡

sklearn中的gbdt原始碼分析

簡單看了一下sklearn中的gbdt原始碼 在這裡記錄一下,目前來說還不能把gbdt的所有理論都搞清楚 sklearn有兩個類似於gbdt的實現 gradientboostingclassifier gradientboostingregressor乙個用於分類,另乙個用於回歸 這兩個類其實區別只...

騰訊管家之小火箭的實現

然後載入火箭view private windowmanager.layoutparams params private int winwidth private int winheight private windowmanager mwm private view view override p...

Andriod中插入騰訊廣告的使用

首先要做準備工作 2 根據開發者文件引入到自己的專案中 下面簡單介紹一下引入的步驟 步驟1 新增sdk 到工程中 直接把架包貼上複製在lib包下 步驟2 修改 androidmanifest.xml 檔案,新增許可權宣告 然後你就可以在專案裡插入開屏或者插屏或者櫥窗廣告或者原生廣告等等,這裡只介紹開...