當前位置: 華文問答 > 旅行

ai夏令營第二期打卡第二天

2023-09-11旅行

@Datawhale

1.lightgbm

GBDT是機器學習中一個長盛不衰的模型,其主要思想是利用弱分類器(決策樹)叠代訓練以得到最優模型,該模型具有訓練效果好、不易過擬合等優點。GBDT在工業界套用廣泛,通常被用於點選率預測,搜尋排序等任務。GBDT也是各種資料探勘競賽的致命武器,據統計Kaggle上的比賽有一半以上的冠軍方案都是基於GBDT。 LightGBM(Light Gradient Boosting Machine)是一個實作GBDT演算法的框架,支持高效率的並列訓練,並且具有以下優點:

  • 更快的訓練速度
  • 更低的記憶體消耗
  • 更好的準確率
  • 分布式支持,可快速處理海量數據
  • lightgbm參數

    Core Parameters 含義 用法
    objective 目標函式 回歸:regression_l1,regression_l2,huber;二分類:binary;多分類:multi class;排序:lambdarank
    boosting 提升器的型別 gbdt:梯度提升決策樹;rf:Random Forest;dart:Dropouts meet Multiple Additive Regression Trees;goss: Gradient-based One-Side Sampling
    data 訓練數據 LightGBM使用這個數據進行訓練模型
    valid 驗證/測試數據 LightGBM將輸出這些數據的度量
    num_boost_round boosting的叠代次數 預設100
    learning_rate 學習率 預設0.1
    num_leaves 樹的葉子樹 預設31
    tree_learner 樹學習器的學習型別 serial:單台機器的tree_learner;feature:特征並列的tree_learn;data:數據並列的tree_learner;voting:投票並列的tree_learner
    num_threads LightGBM的執行緒數 為了更快的速度, 將此設定為真正的 CPU 內核數, 而不是執行緒的數量;對於並列學習, 不應該使用全部的 CPU 內核, 因為這會導致網路效能不佳
    device 樹學習裝置型別 預設cpu,可選cpu/gpu;使用 GPU 來獲得更快的學習速度
    Model Parameters 含義 用途
    max_depth 樹模型的最大深度 預設為-1,限制max_depth,可以在#data 小的情況下防止過擬合. 樹仍然可以透過 leaf-wise 生長.
    min_data_in_leaf 一個葉子上數據的最小數量 預設為21,用來處理過擬合
    min_sum_hessian_in_leaf 一個葉子上的最小hessian和 預設為1e-3,用於處理過擬合
    feature_fraction 特征采樣比例 預設為1.0,如果 feature_fraction 小於 1.0, LightGBM 將會在每次叠代中隨機選擇部份特征. 例如, 如果設定為 0.8, 將會在每棵樹訓練之前選擇 80% 的特征,可以用來加速訓練和處理過擬合
    bagging_fraction 數據采樣比例 預設為1.0,類似於 feature_fraction, 但是它將在不進行重采樣的情況下隨機選擇部份數據,可以用來加速訓練和處理過擬合;Note: 為了啟用 bagging, bagging_freq 應該設定為非零值
    bagging_freq bagging的頻率 預設為0,0 意味著禁用 bagging. k 意味著每 k 次叠代執行bagging
    early_stopping_round 叠代提前終止 如果一個驗證集的度量在 early_stopping_round 迴圈中沒有提升, 將停止訓練
    lambda_l1 L1正則系數 用於處理過擬合
    lambda_l2 L2正則系數 用於處理過擬合
    min_split_gain 執行切分的最小增益 預設為0

    2.XGBoost

    目前已有的GBDT工具基本都是基於預排序的方法(Pre-sorted)的決策樹演算法(如xgboost)。這種構建決策樹的演算法基本思想是:

    1. 對所有特征都按照特征的數值進行排序
    2. 再遍歷分割點的時候用O ( d a t a ) O(data) O ( d a t**a )的代價找到一個特征上的最優分割點
    3. 找到一個特征的分割點後,將數據分裂成左右子節點

    預排序演算法的優點是能精確地找到分割點 缺點:

  • 空間消耗大,演算法需要保存數據的特征值,還保存了特征排序後的結果(例如排序後的索引,為了後續快速的計算分割點),這裏需要消耗訓練數據兩倍的記憶體。
  • 時間上有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價很大。
  • cache最佳化不友好。預排序後,特征對梯度的存取時一種隨機存取,並且不同的特征存取順序不一樣,無法對cache進行最佳化。同時,在每一層長樹的時候,需要隨機存取一個row_index到葉子索引的陣列,並且不同特征存取順序也不一樣,也會造成較大的cache miss。
  • 3.lightgbm與XGBoost比較

    這部份主要總結下 LightGBM 相對於 XGBoost 的優點,從記憶體和速度兩方面進行介紹。

    優點:

    (1)速度更快

  • LightGBM 采用了直方圖演算法將遍歷樣本轉變為遍歷直方圖,極大的降低了時間復雜度;
  • LightGBM 在訓練過程中采用單邊梯度演算法過濾掉梯度小的樣本,減少了大量的計算;
  • LightGBM 采用了基於 Leaf-wise 演算法的增長策略構建樹,減少了很多不必要的計算量;
  • LightGBM 采用最佳化後的特征並列、數據並列方法加速計算,當數據量非常大的時候還可以采用投票並列的策略;
  • LightGBM 對緩存也進行了最佳化,增加了緩存命中率;
  • (2)記憶體更小

  • XGBoost使用預排序後需要記錄特征值及其對應樣本的統計值的索引,而 LightGBM 使用了直方圖演算法將特征值轉變為 bin 值,且不需要記錄特征到樣本的索引,將空間復雜度降低 ,極大的減少了記憶體消耗;
  • LightGBM 采用了直方圖演算法將儲存特征值轉變為儲存 bin 值,降低了記憶體消耗;
  • LightGBM 在訓練過程中采用互斥特征捆綁演算法減少了特征數量,降低了記憶體消耗。
  • 缺點:

  • 可能會長出比較深的決策樹,產生過擬合。因此LightGBM在Leaf-wise之上增加了一個最大深度限制,在保證高效率的同時防止過擬合;
  • Boosting族是叠代演算法,每一次叠代都根據上一次叠代的預測結果對樣本進行權重調整,所以隨著叠代不斷進行,誤差會越來越小,模型的偏差(bias)會不斷降低。由於LightGBM是基於偏差的演算法,所以會對噪點較為敏感;
  • 在尋找最優解時,依據的是最優切分變量,沒有將最優解是全部特征的綜合這一理念考慮進去;