xgboost gbdt特徵點分烈點

2021-08-27 16:20:49 字數 2234 閱讀 1931

lightgbm與xgboost的區別:(**於:

切分演算法(切分點的選取)

占用的記憶體更低,只儲存特徵離散化後的值,而這個值一般用8位整型儲存就足夠了,記憶體消耗可以降低為原來的1/8。

降低了計算的代價:預排序演算法每遍歷乙個特徵值就需要計算一次**的增益,而直方圖演算法只需要計算k次(k可以認為是常數),時間複雜度從o(#data#feature)優化到o(k#features)。(相當於lightgbm犧牲了一部分切分的精確性來提高切分的效率,實際應用中效果還不錯)

空間消耗大,需要儲存資料的特徵值以及特徵排序的結果(比如排序後的索引,為了後續快速計算分割點),需要消耗兩倍於訓練資料的記憶體

時間上也有較大開銷,遍歷每個分割點時都需要進行**增益的計算,消耗代價大

對cache優化不友好,在預排序後,特徵對梯度的訪問是一種隨機訪問,並且不同的特徵訪問的順序不一樣,無法對cache進行優化。同時,在每一層長樹的時候,需要隨機訪問乙個行索引到葉子索引的陣列,並且不同特徵訪問的順序也不一樣,也會造成較大的cache miss。

xgboost使用的是pre-sorted演算法(對所有特徵都按照特徵的數值進行預排序,基本思想是對所有特徵都按照特徵的數值進行預排序;然後在遍歷分割點的時候用o(#data)的代價找到乙個特徵上的最好分割點最後,找到乙個特徵的分割點後,將資料**成左右子節點。優點是能夠更精確的找到資料分隔點;但這種做法有以下缺點

lightgbm使用的是histogram演算法,基本思想是先把連續的浮點特徵值離散化成k個整數,同時構造乙個寬度為k的直方圖。在遍歷資料的時候,根據離散化後的值作為索引在直方圖中累積統計量,當遍歷一次資料後,直方圖累積了需要的統計量,然後根據直方圖的離散值,遍歷尋找最優的分割點;優點在於

決策樹生長策略上:

xgboost採用的是帶深度限制的level-wise生長策略,level-wise過一次資料可以能夠同時**同一層的葉子,容易進行多執行緒優化,不容易過擬合;但不加區分的對待同一層的葉子,帶來了很多沒必要的開銷(因為實際上很多葉子的**增益較低,沒必要進行搜尋和**)

lightgbm採用leaf-wise生長策略,每次從當前所有葉子中找到**增益最大(一般也是資料量最大)的乙個葉子,然後**,如此迴圈;但會生長出比較深的決策樹,產生過擬合(因此 lightgbm 在leaf-wise之上增加了乙個最大深度的限制,在保證高效率的同時防止過擬合)。

histogram 做差加速。乙個容易觀察到的現象:乙個葉子的直方圖可以由它的父親節點的直方圖與它兄弟的直方圖做差得到。通常構造直方圖,需要遍歷該葉子上的所有資料,但直方圖做差僅需遍歷直方圖的k個桶。利用這個方法,lightgbm可以在構造乙個葉子的直方圖後,可以用非常微小的代價得到它兄弟葉子的直方圖,在速度上可以提公升一倍。

直接支援類別特徵:lightgbm優化了對類別特徵的支援,可以直接輸入類別特徵,不需要額外的0/1展開。並在決策樹演算法上增加了類別特徵的決策規則。

分布式訓練方法上(並行優化)

在特徵並行演算法中,通過在本地儲存全部資料避免對資料切分結果的通訊;

在資料並行中使用分散規約(reduce scatter)把直方圖合併的任務分攤到不同的機器,降低通訊和計算,並利用直方圖做差,進一步減少了一半的通訊量。基於投票的資料並行(parallel voting)則進一步優化資料並行中的通訊代價,使通訊代價變成常數級別。

特徵並行的主要思想是在不同機器在不同的特徵集合上分別尋找最優的分割點,然後在機器間同步最優的分割點。

資料並行則是讓不同的機器先在本地構造直方圖,然後進行全域性的合併,最後在合併的直方圖上面尋找最優分割點。

原始lightgbm針對這兩種並行方法都做了優化,

cache命中率優化

基於直方圖的稀疏特徵優化

dart(dropout + gbdt)

goss(gradient-based one-side sampling):一種新的bagging(row subsample)方法,前若干輪(1.0f / gbdtconfig->learning_rate)不bagging;之後bagging時, 取樣一定比例g(梯度)大的樣本

lightgbm優點小結(相較於xgboost)

速度更快

記憶體消耗更低

在每一次尋找中,列舉所有可能的**點,然後利用score確定最佳**點。

代表的實現軟體有:sklearn, r的gbm, 單機版的xgboost。

演算法首先對特徵進行排序,然後依次訪問資料,並以此資料該維特徵的值作為**點,計算score。

特徵點匹配

一 特徵點 角點 匹配 影象匹配能夠應用的場合非常多,如目標跟蹤,檢測,識別,影象拼接等,而角點匹配最核心的技術就要屬角點匹配了,所謂角點匹配是指尋找兩幅影象之間的特徵畫素點的對應關係,從而確定兩幅影象的位置關係。角點匹配可以分為以下四個步驟 1 提取檢測子 在兩張待匹配的影象中尋找那些最容易識別的...

角點特徵檢測

1 何為 角點 對角點可以從兩個不同的角度定義 角點是兩個邊緣的交點 角點是鄰域內具有兩個主方向的特徵點。角點所在的區域通常也是影象中穩定的 資訊豐富的區域,這些區域可能具有某些特性,如旋轉不變性 尺度不變性 仿射不變性和光照亮度不變性。因此,在計算機視覺和數字影象領域,研究角點具有重要的意義。2 ...

特徵點提取opencv

opencv中提供了harris角點檢測的介面,即cv cornerharris 缺陷 角點是畫素級別的,速度較慢 dst cv2.cornerharris gray,2,3,0.04 img 資料型別為 float32 的輸入影象 blocksize 角點檢測中要考慮的領域大小 ksize sob...