一、LightGBM簡介html
LightGBM是一個梯度Boosting框架,使用基於決策樹的學習算法。它能夠說是分佈式的,高效的,有如下優點:算法
1)更快的訓練效率多線程
2)低內存使用框架
3)更高的準確率機器學習
4)支持並行化學習分佈式
5)能夠處理大規模數據工具
與常見的機器學習算法對比,速度是很是快的學習
二、XGboost的缺點優化
在討論LightGBM時,不可避免的會提到XGboost,關於XGboost能夠參考此博文編碼
關於XGboost的不足之處主要有:
1)每輪迭代時,都須要遍歷整個訓練數據屢次。若是把整個訓練數據裝進內存則會限制訓練數據的大小;若是不裝進內存,反覆地讀寫訓練數據又會消耗很是大的時間。
2)預排序方法的時間和空間的消耗都很大
三、LightGBM原理
1)直方圖算法
直方圖算法的基本思想是先把連續的浮點特徵值離散化成$k$個整數,同時構造一個寬度爲$k$的直方圖。在遍歷數據的時候,根據離散化後的值做爲索引在直方圖中累積統計量,當遍歷一次數據後,直方圖累積了須要的統計量,而後根據直方圖的離散值,遍歷尋找最優的分割點。在XGBoost中須要遍歷全部離散化的值,而在這裏只要遍歷$k$個直方圖的值。
使用直方圖算法有不少優勢。首先,最明顯就是內存消耗的下降,直方圖算法不只不須要額外存儲預排序的結果,並且能夠只保存特徵離散化後的值。
而後在計算上的代價也大幅下降,XGBoost預排序算法每遍歷一個特徵值就須要計算一次分裂的增益,而直方圖算法只須要計算$k$次($k$能夠認爲是常數),時間複雜度從O(#data * #feature) 優化到O(k* #features)。
固然,Histogram算法並非完美的。因爲特徵被離散化後,找到的並非很精確的分割點,因此會對結果產生影響。但在不一樣的數據集上的結果代表,離散化的分割點對最終的精度影響並非很大,甚至有時候會更好一點。緣由是決策樹原本就是弱模型,分割點是否是精確並非過重要;較粗的分割點也有正則化的效果,能夠有效地防止過擬合;即便單棵樹的訓練偏差比精確分割的算法稍大,但在梯度提高(Gradient Boosting)的框架下沒有太大的影響。
2)LightGBM的直方圖作差加速
一個容易觀察到的現象:一個葉子的直方圖能夠由它的父親節點的直方圖與它兄弟的直方圖作差獲得。一般構造直方圖,須要遍歷該葉子上的全部數據,但直方圖作差僅需遍歷直方圖的k個桶。利用這個方法,LightGBM能夠在構造一個葉子的直方圖後(父節點在上一輪就已經計算出來了),能夠用很是微小的代價獲得它兄弟葉子的直方圖,在速度上能夠提高一倍。
3)帶深度限制的Leaf-wise的葉子生長策略
Level-wise過一次數據能夠同時分裂同一層的葉子,容易進行多線程優化,也好控制模型複雜度,不容易過擬合。但實際上Level-wise是一種低效的算法,由於它不加區分的對待同一層的葉子,帶來了不少不必的開銷,由於實際上不少葉子的分裂增益較低,不必進行搜索和分裂。
Leaf-wise則是一種更爲高效的策略,每次從當前全部葉子中,找到分裂增益最大的一個葉子,而後分裂,如此循環。所以同Level-wise相比,在分裂次數相同的狀況下,Leaf-wise能夠下降更多的偏差,獲得更好的精度。Leaf-wise的缺點是可能會長出比較深的決策樹,產生過擬合。所以LightGBM在Leaf-wise之上增長了一個最大深度的限制,在保證高效率的同時防止過擬合。
4)直接支持類別特徵(即不須要作one-hot編碼)
實際上大多數機器學習工具都沒法直接支持類別特徵,通常須要把類別特徵,轉化到多維的one-hot編碼特徵,下降了空間和時間的效率。而類別特徵的使用是在實踐中很經常使用的。基於這個考慮,LightGBM優化了對類別特徵的支持,能夠直接輸入類別特徵,不須要額外的one-hot編碼展開。並在決策樹算法上增長了類別特徵的決策規則。在Expo數據集上的實驗,相比0/1展開的方法,訓練速度能夠加速8倍,而且精度一致。
5)直接支持高效並行
LightGBM還具備支持高效並行的優勢。LightGBM原生支持並行學習,目前支持特徵並行和數據並行的兩種。
1)特徵並行的主要思想是在不一樣機器在不一樣的特徵集合上分別尋找最優的分割點,而後在機器間同步最優的分割點。
2)數據並行則是讓不一樣的機器先在本地構造直方圖,而後進行全局的合併,最後在合併的直方圖上面尋找最優分割點。
LightGBM針對這兩種並行方法都作了優化,在特徵並行算法中,經過在本地保存所有數據避免對數據切分結果的通訊;在數據並行中使用分散規約 (Reduce scatter) 把直方圖合併的任務分攤到不一樣的機器,下降通訊和計算,並利用直方圖作差,進一步減小了一半的通訊量。
四、LightGBM參數調優
下面幾張表爲重要參數的含義和如何應用
接下來是調參
下表對應了Faster Spread,better accuracy,over-fitting三種目的時,能夠調整的參數
參考文獻:
https://zhuanlan.zhihu.com/p/25308051