@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)。這種構建決策樹的演算法基本思想是:
- 對所有特征都按照特征的數值進行排序
- 再遍歷分割點的時候用O ( d a t a ) O(data) O ( d a t**a )的代價找到一個特征上的最優分割點
- 找到一個特征的分割點後,將數據分裂成左右子節點
預排序演算法的優點是能精確地找到分割點 缺點:
3.lightgbm與XGBoost比較
這部份主要總結下 LightGBM 相對於 XGBoost 的優點,從記憶體和速度兩方面進行介紹。
優點:
(1)速度更快
(2)記憶體更小
缺點: