lightgbm

XGBoost的缺點

  • 每次迭代訓練時需要讀取整個數據集,耗時耗內存;
  • 使用Basic Exact Greedy Algorithm計算最佳分裂節點時需要預先將特徵的取值進行排序,排序之後爲了保存排序的結果,費時又費內存;
  • 計算分裂節點時需要遍歷每一個候選節點,然後計算分裂之後的信息增益,費時;
  • 生成決策樹是level-wise級別的,也就是預先設置好樹的深度之後,每一顆樹都需要生長到設置的那個深度,這樣有些樹在某一次分裂之後效果甚至沒有提升但仍然會繼續劃分樹枝,然後再次劃分…之後就是無用功了,耗時。

lightGBM的改進

1.直方圖差加速:直方圖算法的基本思想是先把連續的浮點特徵值離散化成k個整數,同時構造一個寬度爲k的直方圖。在遍歷數據的時候,根據離散化後的值作爲索引在直方圖中累積統計量,當遍歷一次數據後,直方圖累積了需要的統計量,然後根據直方圖的離散值,遍歷尋找最優的分割點。內存消耗降低,計算上的代價也大幅降低
2.leaf-wise:每次從當前所有葉子中,找到分裂增益最大的一個葉子,然後分裂,如此循環。因此同Level-wise相比,在分裂次數相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度。可能會長出比較深的決策樹,產生過擬合。因此LightGBM在Leaf-wise之上增加了一個最大深度限制,在保證高效率的同時防止過擬合。
3.特徵並行和數據並行:特徵並行的主要思想是在不同機器在不同的特徵集合上分別尋找最優的分割點,然後在機器間同步最優的分割點。數據並行則是讓不同的機器先在本地構造直方圖,然後進行全局的合併,最後在合併的直方圖上面尋找最優分割點。
4.直接支持類別特徵:可以直接輸入類別特徵,不需要額外的0/1 展開,LightGBM 是第一個直接支持類別特徵的 GBDT 工具。

參數名 含義 用法
task default=train train,predict等
max_depth 數的最大深度,leaf-wise從增益最大的點開始分裂,容易產生過擬合 過擬合時可以降低max_depth減少模型的複雜度
num_leaves 每個決策樹的最大葉子數量 default=31,相當於數的深度爲5
learning_rate 學習率 default=0.1
boosting_type default=gbdt 選擇boosting類型,gbdt,rf等
feature_fraction 選擇特徵比例 用來加速訓練,防止過擬合
bagging_fraction 在不進行重採樣的情況下隨機選擇部分數據 用來加速訓練,防止過擬合
early_stopping 如果驗證集的精度在連續的early_stopping中沒有提升,將停止訓練 default=0
lambda_l1 L1正則 default=0
lambda_l2 L2正則 default=0
num_boost_round 迭代次數 default=100
bagging_seed bagging用的隨機種子 default=3
num_threads 線程數 default=OpenMP_default
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章