機器學習 lgb

2021-09-25 10:27:43 字數 3862 閱讀 9596

1 特徵工程:最大限度地資料中提取特徵以供模型和演算法使用,包括特徵處理,特徵選擇,降維。

2 lgb

2.1 基本介紹: 乙個梯度boosting框架,使用決策樹,分布式,訓練效率,準確率高,記憶體低,處理資料地規模大。

2.2 xgb的缺點:每次迭代都要遍歷資料很多次:預排序法: 要儲存資料的特徵值以及特徵排序的結果;遍歷每乙個分割點的時候,都需要進行**增益的計算,消耗的時間大;在預排序後,特徵對梯度的訪問是一種隨機訪問,特徵的訪問順序也不一樣,對cache 優化很不友好。

2.3 lightgbm 的優化

2.3.1 基於histogram 的決策樹演算法

基本做法是將連續的浮點特徵值離散化為k個整數,同時構造乙個寬度為k的直方圖,在遍歷資料的時候根據離散化後的值作為索引在直方圖中累積統計量,當遍歷一次資料後,直方圖累積了統計量,然後根據直方圖的離散值,遍歷尋找最優的分割點。

優點:降低記憶體消耗,直方圖不需要額外儲存預排序的結果,只需要儲存特徵離散化後的值,而且只用8位整數型儲存,記憶體消耗可以降低為原來的1/8,然後在計算上的代價大幅度降低。

2.3.2 帶深度限制的·leaf-wise 的葉子生長策略

level-wise 過一次資料可以同時**同一層的葉子,容易進行多執行緒優化,也好控制模型的複雜度,不容易過擬合,但實際上level-wise 是低效的,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷,實際上很多葉子的**增益較低,沒必要進行搜尋和**。

leaf-wise 則是一種更為高效的策略,每次從所有葉子中,找到**增益最大的乙個葉子,然後**。如此迴圈,因此同level -wise 相比,**次數相同的情況下,leaf-wise 可以降低更多的誤差,得到更好的精度,缺點是可能會長出較深的決策樹,產生過擬合,因此要增加乙個最大深度的限制。

2.3.3 直方圖做差加速

乙個葉子的直方圖可以由它的父親節點的直方圖與它兄弟節點的直方圖做差得到,速度可以提公升一倍

2.3.4 直接支援類別特徵

0/1 展開降低了空間和時間的效率,

可以直接輸入類別特徵,不需要額外的0/1 展開,可以在決策樹演算法上增加了類別特徵的決策規則。lgb 是第乙個直接支援類別特徵的gbdt 工具。

2.3.5 cache 命中率優化

2.3.6 多執行緒優化

2.3.7 特徵並行和資料並行:

2.4 lightgbm和xgboost有什麼區別?他們的loss一樣麼? 演算法層面有什麼區別?

lgb: 基於histogram 的決策樹演算法,leaf-wise 的葉子生長策略,cache 命中優化率,直接支援類別特徵,

xgb:預排序,level-wise 的階級生長策略,特徵對梯度的訪問是一種隨機訪問

2.5 lightgbm有哪些實現,各有什麼區別?

gdbt: :梯度提公升決策樹,序列速度慢,容易過擬合,

rf: 隨機森林,並行速度快,

dart:訓練較慢;goss:容易過擬合。

參考:3 lightgbm和xgboost區別。

特點:每次迭代獲得的決策樹模型都要乘以乙個縮減係數,從而降低每棵樹的作用,提公升可學習空間,每次迭代擬合的是一階梯度。

xgboost 是gdbt的變種,xgboost 是對目標函式做二階泰勒展開,從而求出下步要擬合的樹的葉子節點的權重,再根據loss 求出每一次**節點的損失減小的大小,從而根據**損失選擇合適的屬性進行**。

先遍歷所有節點的所有屬性進行**,假設選擇了這個a 屬性的乙個取值作為**節點,根據泰勒展開求得的公式可計算該樹結構各個葉子節點的權重,從而計算損失減小的程度,從而綜合各個屬性選擇使得損失減小最大的那個特徵作為當前節點的**屬性,依次類推,直到滿足終止條件。

特點: 1 除了類似gbdt 的縮減係數外,xgboost 對每棵樹的葉子節點個數和權重都做了懲隨機罰,避免過擬合

2 類似隨機森林,xgboost 在構建樹的過程中,對每棵隨機選擇一些屬性作為**屬性。

3 **演算法:(1) 精確的**:把每個屬性的每個取值都當作一次閾值進行遍歷,採用的決策樹是cart(2)近似**演算法: 

對每個屬性的取值進行**,按照各個桶之間的值劃分閾值,xgboost 提出了乙個特殊的分桶策略,一般分桶策略是每個樣本的權重都是相同的,但是xgboost 使每個樣本的權重為損失函式在該樣本點的二階導。

4 xgboost 新增了對稀疏資料的支援,在計算**收益的時候只利用沒有missing 值的那些樣本,但是在推理的時候,也就是在確定了樹的結構,需要將樣本對映到葉子節點的時候,需要對含有缺失值的樣本進行劃分,xgboost 分別假設該樣本屬於左子樹和右子樹,比較兩者**增益,選擇增益較大的那一邊作為該樣本的**方向。

5 xgboost 實現了並行化,不是類似rf 那樣樹和樹之間的並行化,xgboost 和boosting 方法一樣,在樹的粒度上是序列的,但是在構建樹的過程中,也就是在**節點的時候支援並行化,比如同時計算多個屬性的多個取值作為**特徵及其值,然後選擇收益最大的特徵及其取值對節點**。

6 xgboost 在實現時,需要將所有資料匯入記憶體,做一次pre-sort,這樣在選擇**節點時比較迅速,

缺點: level-wise 建樹方式對當前層的所有葉子節點一視同仁,有些葉子節點**收益非常小,對結果沒影響,但是還是要**,加重了計算代價。

預排序方法空間消耗比較大,不僅要儲存特徵值,也要儲存特徵的排序索引,同時時間消耗也大,在遍歷每個**點時都要計算**增益。

lightgbm:

1 採用leaf-wise 策略:在當前所有葉子節點中選擇**收益最大的節點進行**,如此遞迴進行,容易過擬合,容易陷入比較高的深度中,需要對最大深度做限制,從而避免過擬合。

2 lgb 使用了基於histogram 的決策樹演算法,這一點不同與xgboost 中的exact 演算法,histogram 演算法在記憶體和計算代價上都有不小優勢,記憶體優勢: 直方圖演算法的記憶體消耗為:data *feature*1bytes ,(對特徵分桶後只需要儲存特徵離散化後的值),xgboost 的exact 演算法的記憶體消耗為:2*data*feature*4bytes,因為xgboost 既要儲存原始的feature 的值,也要儲存這個值的順序索引,這些值需要32位的浮點數來儲存。計算優勢: 預排序演算法在選擇好**特徵計算**收益時需要遍歷所有樣本的特徵值,時間為data ,而直方圖演算法只需要遍歷桶就行了,時間為bin

3 直方圖做差加速

乙個葉子節點的直方圖可以通過父節點的直方圖減去兄弟節點的直方圖得到,從而加速計算

4 lgb 支援直接輸入categorical 的feature

在對離散特徵**時,每個取值都當作乙個桶,**時的增益算的是是否屬於某個category的gain ,類似於one-hot 編碼,

5 但實際上xgboost 的近似直方圖演算法頁類似於lgb 的,為什麼會慢,

xgboost 在每一層都動態構建直方圖,因為xgboost 的直方圖演算法不是針對每個特定的feature,而是所有feature 共享乙個直方圖(每個·樣本的權重是二階導,所以每一層都要重新構建直方圖,而lgb 對每個特徵都有乙個直方圖,所以構建一次直方圖就夠了。

6 lgb 哪些方面做了並行:

feature parallel

一般的feature parallel 就是對資料做垂直分割,然後將分割後的資料分散到各個worker 上,各個worker 計算其擁有的資料的best split point,之後再彙總得到全域性最優分割點,但是lgb 說這種方法通訊開銷比較大,lgb 的做法是每個worker 有擁有所有資料,再分割。

data parallel 

傳統的data parallel 是將對資料集進行劃分,也叫平行分割,分散到各個workers 上,workers 對得到的資料做直方圖,彙總各個workers 的直方圖得到全域性的直方圖,但是通訊開銷太大,lgb 的做法是使用reduce  scatter 機制,不彙總所有直方圖,只彙總不同workers 的feature 的直方圖,在這個彙總的直方圖上做split,最後同步。

參考:四:隨機森林和gbdt 的區別

使用Dataset構建資料到lgb中

訓練資料要放到dataset中供lgb使用,構建資料如下 1 import lightgbm as lgb 2import numpy as np34 訓練資料,500個樣本,10個維度 5 train data np.random.rand 500,10 6 構建二分類資料 7 label np....

關於XGB和LGB的區別和聯絡

在前一階段的專案中用到了lgb,比起剛開始準備的xgb,結果告訴我lgb速度更快,且準確率更高,鑑於目前各大比賽或者面試中常考這兩種演算法,總結一下目前兩者耳朵區別和聯絡 xgboost採用的是level wise的 策略,而lightgbm採用了leaf wise的策略,區別是xgboost對每一...

機器學習 初識機器學習

1.什麼是機器學習?對於機器學習到現在都還沒有統一的定義,但是,通過乙個例子和較權威的定義來理解機器學習,最後附上我個人對機器學習的理解 2.監督學習 1 監督學習基本思想 我們資料集中的每個樣本都有相應的 正確答案 即每個樣本都是真實值,再根據這些樣本作出 舉乙個房價預售的例子來說明 eg 下面圖...