LightGBM算法详解(教你一文掌握LightGBM所有知识点)
LightGBM
(Light Gradient Boosting Machine)是一款基于決策樹(shù)算法的分布式梯度提升框架。為了滿足工業(yè)界縮短模型計(jì)算時(shí)間的需求,LightGBM的設(shè)計(jì)思路主要是兩點(diǎn):
減小數(shù)據(jù)對(duì)內(nèi)存的使用,保證單個(gè)機(jī)器在不犧牲速度的情況下,盡可能地用上更多的數(shù)據(jù);
減小通信的代價(jià),提升多機(jī)并行時(shí)的效率,實(shí)現(xiàn)在計(jì)算上的線性加速。
由此可見(jiàn),LightGBM的設(shè)計(jì)初衷就是提供一個(gè)快速高效、低內(nèi)存占用、高準(zhǔn)確度、支持并行和大規(guī)模數(shù)據(jù)處理的數(shù)據(jù)科學(xué)工具。
LightGBM是微軟旗下的Distributed Machine Learning Toolkit (DMKT)的一個(gè)項(xiàng)目,由2014年首屆阿里巴巴大數(shù)據(jù)競(jìng)賽獲勝者之一柯國(guó)霖主持開(kāi)發(fā)。雖然其開(kāi)源時(shí)間才僅僅2個(gè)月,但是其快速高效的特點(diǎn)已經(jīng)在數(shù)據(jù)科學(xué)競(jìng)賽中嶄露頭角。Allstate Claims Severity競(jìng)賽中的冠軍解決方案里就使用了LightGBM,并對(duì)其大嘉贊賞。
特性
優(yōu)化速度與內(nèi)存使用。
稀疏優(yōu)化。
優(yōu)化準(zhǔn)確率。使用leaf-wise生長(zhǎng)方式,可以處理分類(lèi)變量。
優(yōu)化網(wǎng)絡(luò)通訊。
支持三種模式并行。
(1)特征并行:
a. Workers find local best split point {feature, threshold} on the local feature set.
b. Communicate local best splits with each other and get the best one.
c. Perform the best split.
(2)數(shù)據(jù)并行:
a. Instead of “Merge global histograms from all local histograms”, LightGBM use “Reduce Scatter” to merge histograms of different (non-overlapping) features for different workers. Then workers find the local best split on local merged histograms and sync up the global best split.
b. As aforementioned, LightGBM uses histogram subtraction to speed up training. Based on this, we can communicate histograms only for one leaf, and get its neighbor’s histograms by subtraction as well.
(3)投票并行:
Voting parallel further reduces the communication cost in data-parallel to constant cost. It uses two-stage voting to reduce the communication cost of feature histograms.
常見(jiàn)問(wèn)題
LightGBM和XGBoost有什么區(qū)別?他們的loss一樣么? 算法層面有什么區(qū)別?
答:LightGBM:基于Histogram的決策樹(shù)算法;Leaf-wise的葉子生長(zhǎng)策略;Cache命中率優(yōu)化;直接支持類(lèi)別特征(categorical Feature);XGBoost:預(yù)排序;Level-wise的層級(jí)生長(zhǎng)策略;特征對(duì)梯度的訪問(wèn)是一種隨機(jī)訪問(wèn)。
LightGBM有哪些實(shí)現(xiàn),各有什么區(qū)別?
答:gbdt:梯度提升決策樹(shù),串行速度慢,容易過(guò)擬合;rf:隨機(jī)森林,并行速度快;dart:訓(xùn)練較慢;goss:容易過(guò)擬合。
LigthGBM是boosting集合模型中的新進(jìn)成員,由微軟提供,它和XGBoost一樣是對(duì)GBDT的高效實(shí)現(xiàn),原理上它和GBDT及XGBoost類(lèi)似,都采用損失函數(shù)的負(fù)梯度作為當(dāng)前決策樹(shù)的殘差近似值,去擬合新的決策樹(shù)。
LightGBM樹(shù)的生長(zhǎng)方式是垂直方向的,其他的算法都是水平方向的,也就是說(shuō)Light GBM生長(zhǎng)的是樹(shù)的葉子,其他的算法生長(zhǎng)的是樹(shù)的層次。
LightGBM選擇具有最大誤差的樹(shù)葉進(jìn)行生長(zhǎng),當(dāng)生長(zhǎng)同樣的樹(shù)葉,生長(zhǎng)葉子的算法可以比基于層的算法減少更多的loss。
不建議在小數(shù)據(jù)集上使用LightGBM。LightGBM對(duì)過(guò)擬合很敏感,對(duì)于小數(shù)據(jù)集非常容易過(guò)擬合。對(duì)于多小屬于小數(shù)據(jù)集,并沒(méi)有什么閾值,但是從我的經(jīng)驗(yàn),我建議對(duì)于10000+以上的數(shù)據(jù)的時(shí)候,再使用LightGBM。
LightGBM在很多方面會(huì)比XGBoost表現(xiàn)的更為優(yōu)秀。它有以下優(yōu)勢(shì):
更快的訓(xùn)練效率
低內(nèi)存使用
更高的準(zhǔn)確率
支持并行化學(xué)習(xí)
可處理大規(guī)模數(shù)據(jù)
支持直接使用category特征
從下圖實(shí)驗(yàn)數(shù)據(jù)可以看出, LightGBM比XGBoost快將近10倍,內(nèi)存占用率大約為XGBoost的1/6,并且準(zhǔn)確率也有提升。
至于LGB為什么比XGB的精度高這一點(diǎn),我的理解是選擇梯度大(殘差大)樣本來(lái)進(jìn)行特征分裂生成的樹(shù),借鑒了Adaboost的更改樣本權(quán)重的思想。每棵樹(shù)針對(duì)某些特定訓(xùn)練樣本有著較好的劃分能力,導(dǎo)致每棵樹(shù)之間的異質(zhì)性較大,對(duì)于效果近似但異質(zhì)性大的模型加權(quán)往往會(huì)帶來(lái)更大的提升。
通俗解釋:LGB的優(yōu)化方法是,在保留大梯度樣本的同時(shí),隨機(jī)地保留一些小梯度樣本,同時(shí)放大了小梯度樣本帶來(lái)的信息增益。
這樣說(shuō)起來(lái)比較抽象,我們過(guò)一遍流程: 首先把樣本按照梯度排序,選出梯度最大的a%個(gè)樣本,然后在剩下小梯度數(shù)據(jù)中隨機(jī)選取b%個(gè)樣本,在計(jì)算信息增益的時(shí)候,將選出來(lái)b%個(gè)小梯度樣本的信息增益擴(kuò)大 1 - a / b 倍。這樣就會(huì)避免對(duì)于數(shù)據(jù)分布的改變。
這給我的感覺(jué)就是一個(gè)公寓里本來(lái)住了十個(gè)人,感覺(jué)太擠了,趕走了六個(gè)人,但剩下的四個(gè)人要分?jǐn)偹麄兞鶄€(gè)人的房租。
舉個(gè)例子,對(duì)于一列特征[1,nan,1,nan,1]和一列特征[nan,1,nan,1,nan],他們正好可以合并成一列特征[1,2,1,2,1]。LGB的目標(biāo)就是在于找到這樣的特征并且將他們合并在一起。
如果把特征抽象成圖中的點(diǎn),特征之間的沖突看作是圖中的邊,那么問(wèn)題就轉(zhuǎn)換為找出圖中的社團(tuán)并使圖中的社團(tuán)數(shù)量最少。LGB里提出了一個(gè)貪心的策略,按照有權(quán)度來(lái)為圖中所有的點(diǎn)排序,然后把特征合并到度小于某個(gè)閾值的社團(tuán)中或單獨(dú)創(chuàng)建一個(gè)社團(tuán)。
對(duì)于特征如何合并,一個(gè)重要的原則就是使合并的兩個(gè)特征可以被順利區(qū)分出來(lái),LGB采取了一個(gè)更改閾值的方法。例如對(duì)于特征x∈(0, 10), 特征y∈(0, 20),就可以把特征y轉(zhuǎn)換為y∈(10,30),然后再去合并x與y。
看完這些驚人的實(shí)驗(yàn)結(jié)果以后,對(duì)下面兩個(gè)問(wèn)題產(chǎn)生了疑惑:XGBoost已經(jīng)十分完美了,為什么還要追求速度更快、內(nèi)存使用更小的模型?對(duì)GBDT算法進(jìn)行改進(jìn)和提升的技術(shù)細(xì)節(jié)是什么?
提出LightGBM的動(dòng)機(jī)
常用的機(jī)器學(xué)習(xí)算法,例如神經(jīng)網(wǎng)絡(luò)等算法,都可以以mini-batch的方式訓(xùn)練,訓(xùn)練數(shù)據(jù)的大小不會(huì)受到內(nèi)存限制。而GBDT在每一次迭代的時(shí)候,都需要遍歷整個(gè)訓(xùn)練數(shù)據(jù)多次。如果把整個(gè)訓(xùn)練數(shù)據(jù)裝進(jìn)內(nèi)存則會(huì)限制訓(xùn)練數(shù)據(jù)的大小;如果不裝進(jìn)內(nèi)存,反復(fù)地讀寫(xiě)訓(xùn)練數(shù)據(jù)又會(huì)消耗非常大的時(shí)間。尤其面對(duì)工業(yè)級(jí)海量的數(shù)據(jù),普通的GBDT算法是不能滿足其需求的。
LightGBM提出的主要原因就是為了解決GBDT在海量數(shù)據(jù)遇到的問(wèn)題,讓GBDT可以更好更快地用于工業(yè)實(shí)踐。
XGBoost的優(yōu)缺點(diǎn)
精確貪心算法
每輪迭代時(shí),都需要遍歷整個(gè)訓(xùn)練數(shù)據(jù)多次。如果把整個(gè)訓(xùn)練數(shù)據(jù)裝進(jìn)內(nèi)存則會(huì)限制訓(xùn)練數(shù)據(jù)的大小;如果不裝進(jìn)內(nèi)存,反復(fù)地讀寫(xiě)訓(xùn)練數(shù)據(jù)又會(huì)消耗非常大的時(shí)間。
優(yōu)點(diǎn):
可以找到精確的劃分條件
缺點(diǎn):
計(jì)算量巨大
內(nèi)存占用巨大
易產(chǎn)生過(guò)擬合
Level-wise迭代方式
預(yù)排序方法(pre-sorted):首先,空間消耗大。這樣的算法需要保存數(shù)據(jù)的特征值,還保存了特征排序的結(jié)果(例如排序后的索引,為了后續(xù)快速的計(jì)算分割點(diǎn),在這里XGBoost采用了特征粒度的并行化),這里需要消耗訓(xùn)練數(shù)據(jù)兩倍的內(nèi)存。其次時(shí)間上也有較大的開(kāi)銷(xiāo),在遍歷每一個(gè)分割點(diǎn)的時(shí)候,都需要進(jìn)行分裂增益的計(jì)算,消耗的代價(jià)大。
優(yōu)點(diǎn):
可以使用多線程
可以加速精確貪心算法
缺點(diǎn):
效率低下,可能產(chǎn)生不必要的葉結(jié)點(diǎn)
對(duì)cache優(yōu)化不友好
在預(yù)排序后,特征對(duì)梯度的訪問(wèn)是一種隨機(jī)訪問(wèn),并且不同的特征訪問(wèn)的順序不一樣,無(wú)法對(duì)cache進(jìn)行優(yōu)化。同時(shí),在每一層長(zhǎng)樹(shù)的時(shí)候,需要隨機(jī)訪問(wèn)一個(gè)行索引到葉子索引的數(shù)組,并且不同特征訪問(wèn)的順序也不一樣,也會(huì)造成較大的cache miss。
LightGBM在哪些地方進(jìn)行了優(yōu)化?
概括來(lái)說(shuō),lightGBM主要有以下特點(diǎn):
基于Histogram的決策樹(shù)算法
帶深度限制的Leaf-wise的葉子生長(zhǎng)策略
直方圖做差加速
直接支持類(lèi)別特征(Categorical Feature)
Cache命中率優(yōu)化
基于直方圖的稀疏特征優(yōu)化
多線程優(yōu)化
XGBoost使用的是pre-sorted算法,能夠更精確的找到數(shù)據(jù)分隔點(diǎn)。
首先,對(duì)所有特征按數(shù)值進(jìn)行預(yù)排序。
其次,在每次的樣本分割時(shí),用O(# data)的代價(jià)找到每個(gè)特征的最優(yōu)分割點(diǎn)。
最后,找到最后的特征以及分割點(diǎn),將數(shù)據(jù)分裂成左右兩個(gè)子節(jié)點(diǎn)。
這種pre-sorting算法能夠準(zhǔn)確找到分裂點(diǎn),但是在空間和時(shí)間上有很大的開(kāi)銷(xiāo)。
由于需要對(duì)特征進(jìn)行預(yù)排序并且需要保存排序后的索引值(為了后續(xù)快速的計(jì)算分裂點(diǎn)),因此內(nèi)存需要訓(xùn)練數(shù)據(jù)的兩倍。
在遍歷每一個(gè)分割點(diǎn)的時(shí)候,都需要進(jìn)行分裂增益的計(jì)算,消耗的代價(jià)大。
LightGBM使用的是histogram算法,占用的內(nèi)存更低,數(shù)據(jù)分隔的復(fù)雜度更低。其思想是將連續(xù)的浮點(diǎn)特征離散成k個(gè)離散值,并構(gòu)造寬度為k的Histogram。然后遍歷訓(xùn)練數(shù)據(jù),統(tǒng)計(jì)每個(gè)離散值在直方圖中的累計(jì)統(tǒng)計(jì)量。在進(jìn)行特征選擇時(shí),只需要根據(jù)直方圖的離散值,遍歷尋找最優(yōu)的分割點(diǎn)。
使用直方圖算法有很多優(yōu)點(diǎn)。首先最明顯就是內(nèi)存消耗的降低,直方圖算法不僅不需要額外存儲(chǔ)預(yù)排序的結(jié)果,而且可以只保存特征離散化后的值,而這個(gè)值一般用8位整型存儲(chǔ)就足夠了,內(nèi)存消耗可以降低為原來(lái)的1/8。
Histogram algorithm
Histogram algorithm應(yīng)該翻譯為直方圖算法,直方圖算法的思想也很簡(jiǎn)單,首先將連續(xù)的浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換為bin數(shù)據(jù),具體過(guò)程是首先確定對(duì)于每一個(gè)特征需要多少的桶bin,然后均分,將屬于該桶的樣本數(shù)據(jù)更新為bin的值,最后用直方圖表示。(看起來(lái)很高大上,其實(shí)就是直方圖統(tǒng)計(jì),最后我們將大規(guī)模的數(shù)據(jù)放在了直方圖中)
直方圖算法有幾個(gè)需要注意的地方:
使用bin替代原始數(shù)據(jù)相當(dāng)于增加了正則化;
使用bin意味著很多數(shù)據(jù)的細(xì)節(jié)特征被放棄了,相似的數(shù)據(jù)可能被劃分到相同的桶中,這樣的數(shù)據(jù)之間的差異就消失了;
bin數(shù)量選擇決定了正則化的程度,bin越少懲罰越嚴(yán)重,欠擬合風(fēng)險(xiǎn)越高。
直方圖算法需要注意的地方:
構(gòu)建直方圖時(shí)不需要對(duì)數(shù)據(jù)進(jìn)行排序(比XGBoost快),因?yàn)轭A(yù)先設(shè)定了bin的范圍;
直方圖除了保存劃分閾值和當(dāng)前bin內(nèi)樣本數(shù)以外還保存了當(dāng)前bin內(nèi)所有樣本的一階梯度和(一階梯度和的平方的均值等價(jià)于均方損失);
閾值的選取是按照直方圖從小到大遍歷,使用了上面的一階梯度和,目的是得到劃分之后△loss最大的特征及閾值。
Histogram 算法的優(yōu)缺點(diǎn):
Histogram算法并不是完美的。由于特征被離散化后,找到的并不是很精確的分割點(diǎn),所以會(huì)對(duì)結(jié)果產(chǎn)生影響。但在實(shí)際的數(shù)據(jù)集上表明,離散化的分裂點(diǎn)對(duì)最終的精度影響并不大,甚至?xí)靡恍T蛟谟赿ecision tree本身就是一個(gè)弱學(xué)習(xí)器,采用Histogram算法會(huì)起到正則化的效果,有效地防止模型的過(guò)擬合。
時(shí)間上的開(kāi)銷(xiāo)由原來(lái)的O(#data * #features)降到O(k * #features)。由于離散化,#bin遠(yuǎn)小于#data,因此時(shí)間上有很大的提升。
Histogram算法還可以進(jìn)一步加速。一個(gè)葉子節(jié)點(diǎn)的Histogram可以直接由父節(jié)點(diǎn)的Histogram和兄弟節(jié)點(diǎn)的Histogram做差得到。一般情況下,構(gòu)造Histogram需要遍歷該葉子上的所有數(shù)據(jù),通過(guò)該方法,只需要遍歷Histogram的k個(gè)捅。速度提升了一倍。
決策樹(shù)生長(zhǎng)策略
在Histogram算法之上,LightGBM進(jìn)行進(jìn)一步的優(yōu)化。首先它拋棄了大多數(shù)GBDT工具使用的按層生長(zhǎng) (level-wise)的決策樹(shù)生長(zhǎng)策略,而使用了帶有深度限制的按葉子生長(zhǎng) (leaf-wise)算法。
XGBoost采用的是按層生長(zhǎng)level(depth)-wise生長(zhǎng)策略,能夠同時(shí)分裂同一層的葉子,從而進(jìn)行多線程優(yōu)化,不容易過(guò)擬合;但不加區(qū)分的對(duì)待同一層的葉子,帶來(lái)了很多沒(méi)必要的開(kāi)銷(xiāo)。因?yàn)閷?shí)際上很多葉子的分裂增益較低,沒(méi)必要進(jìn)行搜索和分裂。
LightGBM采用leaf-wise生長(zhǎng)策略,每次從當(dāng)前所有葉子中找到分裂增益最大(一般也是數(shù)據(jù)量最大)的一個(gè)葉子,然后分裂,如此循環(huán)。因此同Level-wise相比,在分裂次數(shù)相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度。Leaf-wise的缺點(diǎn)是可能會(huì)長(zhǎng)出比較深的決策樹(shù),產(chǎn)生過(guò)擬合。因此LightGBM在Leaf-wise之上增加了一個(gè)最大深度的限制,在保證高效率的同時(shí)防止過(guò)擬合。
直方圖差加速
LightGBM另一個(gè)優(yōu)化是Histogram(直方圖)做差加速。一個(gè)容易觀察到的現(xiàn)象:一個(gè)葉子的直方圖可以由它的父親節(jié)點(diǎn)的直方圖與它兄弟的直方圖做差得到。通常構(gòu)造直方圖,需要遍歷該葉子上的所有數(shù)據(jù),但直方圖做差僅需遍歷直方圖的k個(gè)桶。利用這個(gè)方法,LightGBM可以在構(gòu)造一個(gè)葉子的直方圖后,可以用非常微小的代價(jià)得到它兄弟葉子的直方圖,在速度上可以提升一倍。
直接支持類(lèi)別特征
實(shí)際上大多數(shù)機(jī)器學(xué)習(xí)工具都無(wú)法直接支持類(lèi)別特征,一般需要把類(lèi)別特征,轉(zhuǎn)化one-hotting特征,降低了空間和時(shí)間的效率。而類(lèi)別特征的使用是在實(shí)踐中很常用的?;谶@個(gè)考慮,LightGBM優(yōu)化了對(duì)類(lèi)別特征的支持,可以直接輸入類(lèi)別特征,不需要額外的0/1展開(kāi)。并在決策樹(shù)算法上增加了類(lèi)別特征的決策規(guī)則。
one-hot編碼是處理類(lèi)別特征的一個(gè)通用方法,然而在樹(shù)模型中,這可能并不一定是一個(gè)好的方法,尤其當(dāng)類(lèi)別特征中類(lèi)別個(gè)數(shù)很多的情況下。主要的問(wèn)題是:
可能無(wú)法在這個(gè)類(lèi)別特征上進(jìn)行切分(即浪費(fèi)了這個(gè)特征)。使用one-hot編碼的話,意味著在每一個(gè)決策節(jié)點(diǎn)上只能使用one vs rest(例如是不是狗,是不是貓等)的切分方式。當(dāng)類(lèi)別值很多時(shí),每個(gè)類(lèi)別上的數(shù)據(jù)可能會(huì)比較少,這時(shí)候切分會(huì)產(chǎn)生不平衡,這意味著切分增益也會(huì)很小(比較直觀的理解是,不平衡的切分和不切分沒(méi)有區(qū)別)。
會(huì)影響決策樹(shù)的學(xué)習(xí)。因?yàn)榫退憧梢栽谶@個(gè)類(lèi)別特征進(jìn)行切分,也會(huì)把數(shù)據(jù)切分到很多零碎的小空間上,如圖1左邊所示。而決策樹(shù)學(xué)習(xí)時(shí)利用的是統(tǒng)計(jì)信息,在這些數(shù)據(jù)量小的空間上,統(tǒng)計(jì)信息不準(zhǔn)確,學(xué)習(xí)會(huì)變差。但如果使用下圖右邊的分裂方式,數(shù)據(jù)會(huì)被切分到兩個(gè)比較大的空間,進(jìn)一步的學(xué)習(xí)也會(huì)更好。
下圖右邊葉子節(jié)點(diǎn)的含義是X=A或者X=C放到左孩子,其余放到右孩子。
LightGBM處理分類(lèi)特征大致流程
為了解決one-hot編碼處理類(lèi)別特征的不足。LightGBM采用了Many vs many的切分方式,實(shí)現(xiàn)了類(lèi)別特征的最優(yōu)切分。用LightGBM可以直接輸入類(lèi)別特征,并產(chǎn)生上圖右邊的效果。在1個(gè)k維的類(lèi)別特征中尋找最優(yōu)切分,樸素的枚舉算法的復(fù)雜度是O(2k),而LightGBM采用了如On Grouping For Maximum Homogeneity的方法實(shí)現(xiàn)了O(klogk)的算法。
算法流程下圖所示:在枚舉分割點(diǎn)之前,先把直方圖按每個(gè)類(lèi)別的均值進(jìn)行排序;然后按照均值的結(jié)果依次枚舉最優(yōu)分割點(diǎn)。從下圖可以看到,Sum(y)/Count(y)為類(lèi)別的均值。當(dāng)然,這個(gè)方法很容易過(guò)擬合,所以在LGBM中加入了很多對(duì)這個(gè)方法的約束和正則化。
下圖是一個(gè)簡(jiǎn)單的對(duì)比實(shí)驗(yàn),可以看到該最優(yōu)方法在AUC上提升了1.5個(gè)點(diǎn),并且時(shí)間只多了20%。
下面具體來(lái)講下在代碼中如何求解類(lèi)別特征的最優(yōu)切分的流程:
離散特征建立直方圖的過(guò)程:統(tǒng)計(jì)該特征下每一種離散值出現(xiàn)的次數(shù),并從高到低排序,并過(guò)濾掉出現(xiàn)次數(shù)較少的特征值, 然后為每一個(gè)特征值,建立一個(gè)bin容器, 對(duì)于在bin容器內(nèi)出現(xiàn)次數(shù)較少的特征值直接過(guò)濾掉,不建立bin容器。
計(jì)算分裂閾值的過(guò)程:
先看該特征下劃分出的bin容器的個(gè)數(shù),如果bin容器的數(shù)量小于4,直接使用one vs other方式, 逐個(gè)掃描每一個(gè)bin容器,找出最佳分裂點(diǎn);
對(duì)于bin容器較多的情況, 先進(jìn)行過(guò)濾,只讓子集合較大的bin容器參加劃分閾值計(jì)算, 對(duì)每一個(gè)符合條件的bin容器進(jìn)行公式計(jì)算:
公式如下: 該bin容器下所有樣本的一階梯度之和/該bin容器下所有樣本的二階梯度之和 + 正則項(xiàng)(參數(shù)cat_smooth)
這里為什么不是label的均值呢?其實(shí)上例中只是為了便于理解,只針對(duì)了學(xué)習(xí)一棵樹(shù)且是回歸問(wèn)題的情況, 這時(shí)候一階導(dǎo)數(shù)是Y, 二階導(dǎo)數(shù)是1),得到一個(gè)值,根據(jù)該值對(duì)bin容器從小到大進(jìn)行排序,然后分從左到右、從右到左進(jìn)行搜索,得到最優(yōu)分裂閾值。但是有一點(diǎn),沒(méi)有搜索所有的bin容器,而是設(shè)定了一個(gè)搜索bin容器數(shù)量的上限值,程序中設(shè)定是32,即參數(shù)max_num_cat。LightGBM中對(duì)離散特征實(shí)行的是many vs many 策略,這32個(gè)bin中最優(yōu)劃分的閾值的左邊或者右邊所有的bin容器就是一個(gè)many集合,而其他的bin容器就是另一個(gè)many集合。
對(duì)于連續(xù)特征,劃分閾值只有一個(gè),對(duì)于離散值可能會(huì)有多個(gè)劃分閾值,每一個(gè)劃分閾值對(duì)應(yīng)著一個(gè)bin容器編號(hào),當(dāng)使用離散特征進(jìn)行分裂時(shí),只要數(shù)據(jù)樣本對(duì)應(yīng)的bin容器編號(hào)在這些閾值對(duì)應(yīng)的bin集合之中,這條數(shù)據(jù)就加入分裂后的左子樹(shù),否則加入分裂后的右子樹(shù)。
直接支持高效并行
LightGBM原生支持并行學(xué)習(xí),目前支持特征并行和數(shù)據(jù)并行的兩種。特征并行的主要思想是在不同機(jī)器在不同的特征集合上分別尋找最優(yōu)的分割點(diǎn),然后在機(jī)器間同步最優(yōu)的分割點(diǎn)。數(shù)據(jù)并行則是讓不同的機(jī)器先在本地構(gòu)造直方圖,然后進(jìn)行全局的合并,最后在合并的直方圖上面尋找最優(yōu)分割點(diǎn)。
LightGBM針對(duì)這兩種并行方法都做了優(yōu)化,在特征并行算法中,通過(guò)在本地保存全部數(shù)據(jù)避免對(duì)數(shù)據(jù)切分結(jié)果的通信;在數(shù)據(jù)并行中使用分散規(guī)約(Reduce scatter)把直方圖合并的任務(wù)分?jǐn)偟讲煌臋C(jī)器,降低通信和計(jì)算,并利用直方圖做差,進(jìn)一步減少了一半的通信量。
基于投票的數(shù)據(jù)并行則進(jìn)一步優(yōu)化數(shù)據(jù)并行中的通信代價(jià),使通信代價(jià)變成常數(shù)級(jí)別。在數(shù)據(jù)量很大的時(shí)候,使用投票并行可以得到非常好的加速效果。
網(wǎng)絡(luò)通信優(yōu)化
XGBoost由于采用pre-sorted算法,通信代價(jià)非常大,所以在并行的時(shí)候也是采用histogram算法;LightGBM采用的histogram算法通信代價(jià)小,通過(guò)使用集合通信算法,能夠?qū)崿F(xiàn)并行計(jì)算的線性加速。
LightGBM原理
提升樹(shù)是利用加模型與前向分布算法實(shí)現(xiàn)學(xué)習(xí)的優(yōu)化過(guò)程,它有一些高效實(shí)現(xiàn),如XGBoost, pGBRT,GBDT(Gradient Boosting Decision Tree)等。其中GBDT采用負(fù)梯度作為劃分的指標(biāo)(信息增益),XGBoost則利用到二階導(dǎo)數(shù)。他們共同的不足是,計(jì)算信息增益需要掃描所有樣本,從而找到最優(yōu)劃分點(diǎn)。在面對(duì)大量數(shù)據(jù)或者特征維度很高時(shí),它們的效率和擴(kuò)展性很難使人滿意。解決這個(gè)問(wèn)題的直接方法就是減少特征量和數(shù)據(jù)量而且不影響精確度,有部分工作根據(jù)數(shù)據(jù)權(quán)重采樣來(lái)加速booisting的過(guò)程,但由于GBDT沒(méi)有樣本權(quán)重不能應(yīng)用。
結(jié)合使用 GOSS 和 EFB 的 GBDT 算法就是 LightGBM。微軟開(kāi)源的LightGBM(基于GBDT的)則很好的解決這些問(wèn)題,它主要包含兩個(gè)算法:
單邊梯度采樣,Gradient-based One-Side Sampling(GOSS)
GOSS(從減少樣本角度):排除大部分小梯度的樣本,僅用剩下的樣本計(jì)算信息增益。GBDT雖然沒(méi)有數(shù)據(jù)權(quán)重,但每個(gè)數(shù)據(jù)實(shí)例有不同的梯度,根據(jù)計(jì)算信息增益的定義,梯度大的實(shí)例對(duì)信息增益有更大的影響,因此在下采樣時(shí),我們應(yīng)該盡量保留梯度大的樣本(預(yù)先設(shè)定閾值,或者最高百分位間),隨機(jī)去掉梯度小的樣本。我們證明此措施在相同的采樣率下比隨機(jī)采樣獲得更準(zhǔn)確的結(jié)果,尤其是在信息增益范圍較大時(shí)。
GBDT使用決策樹(shù),來(lái)學(xué)習(xí)獲得一個(gè)將輸入空間映射到梯度空間的函數(shù)。假設(shè)訓(xùn)練集有n個(gè)實(shí)例x1,…,xn,特征維度為s。每次梯度迭時(shí),模型數(shù)據(jù)變量的損失函數(shù)的負(fù)梯度方向表示為g1,…,gn,決策樹(shù)通過(guò)最優(yōu)切分點(diǎn)(最大信息增益點(diǎn))將數(shù)據(jù)分到各個(gè)節(jié)點(diǎn)。GBDT通過(guò)分割后的方差衡量信息增益。
GOSS是一種在減少數(shù)據(jù)量和保證精度上平衡的算法。GOSS是通過(guò)區(qū)分不同梯度的實(shí)例,保留較大梯度實(shí)例同時(shí)對(duì)較小梯度隨機(jī)采樣的方式減少計(jì)算量,從而達(dá)到提升效率的目的。
EFB是通過(guò)特征捆綁的方式減少特征維度(其實(shí)是降維技術(shù))的方式,來(lái)提升計(jì)算效率。通常被捆綁的特征都是互斥的(一個(gè)特征值為零,一個(gè)特征值不為零),這樣兩個(gè)特征捆綁起來(lái)才不會(huì)丟失信息。如果兩個(gè)特征并不是完全互斥(部分情況下兩個(gè)特征都是非零值),可以用一個(gè)指標(biāo)對(duì)特征不互斥程度進(jìn)行衡量,稱之為沖突比率,當(dāng)這個(gè)值較小時(shí),我們可以選擇把不完全互斥的兩個(gè)特征捆綁,而不影響最后的精度。
AdaBoost中,樣本權(quán)重是數(shù)據(jù)實(shí)例重要性的指標(biāo)。然而在GBDT中沒(méi)有原始樣本權(quán)重,不能應(yīng)用權(quán)重采樣。幸運(yùn)的事,我們觀察到GBDT中每個(gè)數(shù)據(jù)都有不同的梯度值,對(duì)采樣十分有用,即實(shí)例的梯度小,實(shí)例訓(xùn)練誤差也就較小,已經(jīng)被學(xué)習(xí)得很好了,直接想法就是丟掉這部分梯度小的數(shù)據(jù)。然而這樣做會(huì)改變數(shù)據(jù)的分布,將會(huì)影響訓(xùn)練的模型的精確度,為了避免此問(wèn)題,我們提出了GOSS。
GOSS保留所有的梯度較大的實(shí)例,在梯度小的實(shí)例上使用隨機(jī)采樣。為了抵消對(duì)數(shù)據(jù)分布的影響,計(jì)算信息增益的時(shí)候,GOSS對(duì)小梯度的數(shù)據(jù)引入常量乘數(shù)。GOSS首先根據(jù)數(shù)據(jù)的梯度絕對(duì)值排序,選取top a個(gè)實(shí)例。然后在剩余的數(shù)據(jù)中隨機(jī)采樣b個(gè)實(shí)例。接著計(jì)算信息增益時(shí)為采樣出的小梯度數(shù)據(jù)乘以(1-a)/b,這樣算法就會(huì)更關(guān)注訓(xùn)練不足的實(shí)例,而不會(huì)過(guò)多改變?cè)瓟?shù)據(jù)集的分布。
定義:O表示某個(gè)固定節(jié)點(diǎn)的訓(xùn)練集,分割特征j的分割點(diǎn)d定義為:
其中,
在GOSS中,
首先根據(jù)數(shù)據(jù)的梯度將訓(xùn)練降序排序。
保留top a個(gè)數(shù)據(jù)實(shí)例,作為數(shù)據(jù)子集A。
對(duì)于剩下的數(shù)據(jù)的實(shí)例,隨機(jī)采樣獲得大小為b的數(shù)據(jù)子集B。
最后我們通過(guò)以下方程估計(jì)信息增益:
此處GOSS通過(guò)較小的數(shù)據(jù)集估計(jì)信息增益V~j(d)將大大地減小計(jì)算量。更重要的,我們接下來(lái)理論表明GOSS不會(huì)丟失許多訓(xùn)練精度,勝過(guò)隨機(jī)采樣,理論的證明在附加材料。
我們定義GOSS近似誤差為:
根據(jù)上述理論,我們得出以下結(jié)論:
GOSS流程
輸入:訓(xùn)練數(shù)據(jù),迭代步數(shù)d,大梯度數(shù)據(jù)的采樣率a,小梯度數(shù)據(jù)的采樣率b,損失函數(shù)和若學(xué)習(xí)器的類(lèi)型(一般為決策樹(shù));
輸出:訓(xùn)練好的強(qiáng)學(xué)習(xí)器;
(1)根據(jù)樣本點(diǎn)的梯度的絕對(duì)值對(duì)它們進(jìn)行降序排序;
(2)對(duì)排序后的結(jié)果選取前a*100%的樣本生成一個(gè)大梯度樣本點(diǎn)的子集;
(3)對(duì)剩下的樣本集合(1-a)100%的樣本,隨機(jī)的選取b(1-a)*100%個(gè)樣本點(diǎn),生成一個(gè)小梯度樣本點(diǎn)的集合;
(4)將大梯度樣本和采樣的小梯度樣本合并;
(5)將小梯度樣本乘上一個(gè)權(quán)重系數(shù);
(6)使用上述的采樣的樣本,學(xué)習(xí)一個(gè)新的弱學(xué)習(xí)器;
(7)不斷地重復(fù)(1)~(6)步驟直到達(dá)到規(guī)定的迭代次數(shù)或者收斂為止。
通過(guò)上面的算法可以在不改變數(shù)據(jù)分布的前提下不損失學(xué)習(xí)器精度的同時(shí)大大的減少模型學(xué)習(xí)的速率。
從上面的描述可知,當(dāng)a=0時(shí),GOSS算法退化為隨機(jī)采樣算法;當(dāng)a=1時(shí),GOSS算法變?yōu)椴扇≌麄€(gè)樣本的算法。在許多情況下,GOSS算法訓(xùn)練出的模型精確度要高于隨機(jī)采樣算法。另一方面,采樣也將會(huì)增加若學(xué)習(xí)器的多樣性,從而潛在的提升了訓(xùn)練出的模型泛化能力。
互斥特征綁定,Exclusive Feature Bundling(EFB)
EFB(從減少特征角度):捆綁互斥特征,也就是他們很少同時(shí)取非零值(也就是用一個(gè)合成特征代替)。通常真是應(yīng)用中,雖然特征量比較多,但是由于特征空間十分稀疏,是否可以設(shè)計(jì)一種無(wú)損的方法來(lái)減少有效特征呢?特別在稀疏特征空間上,許多特征幾乎是互斥的(例如許多特征不會(huì)同時(shí)為非零值,像one-hot),我們可以捆綁互斥的特征。最后,我們將捆綁問(wèn)題歸約到圖著色問(wèn)題,通過(guò)貪心算法求得近似解。
結(jié)合使用 GOSS 和 EFB 的 GBDT 算法就是 LightGBM。
EBF的算法步驟如下:
將特征按照非零值的個(gè)數(shù)進(jìn)行排序
計(jì)算不同特征之間的沖突比率
遍歷每個(gè)特征并嘗試合并特征,使沖突比率最小化
高位的數(shù)據(jù)通常是稀疏的,這種稀疏性啟發(fā)我們?cè)O(shè)計(jì)一種無(wú)損地方法來(lái)減少特征的維度。特別的,稀疏特征空間中,許多特征是互斥的,例如他們從不同時(shí)為非零值。我們可以綁定互斥的特征為單一特征,通過(guò)仔細(xì)設(shè)計(jì)特征臊面算法,我們從特征捆綁中構(gòu)建了與單個(gè)特征相同的特征直方圖。這種方式的間直方圖時(shí)間復(fù)雜度從O(#data * #feature)降到O(#data * #bundle),由于#bundle << # feature,我們能夠極大地加速GBDT的訓(xùn)練過(guò)程而且損失精度。
有兩個(gè)問(wèn)題:
怎么判定那些特征應(yīng)該綁在一起(build bundled)?
怎么把特征綁為一個(gè)(merge feature)?
bundle(什么樣的特征被綁定)?
**理論1:**將特征分割為較小量的互斥特征群是NP難的。
證明:將圖著色問(wèn)題歸約為此問(wèn)題,而圖著色是NP難的,所以此問(wèn)題就是NP難的。
給定圖著色實(shí)例G=(V, E)。以G的關(guān)聯(lián)矩陣的每一行為特征,得到我們問(wèn)題的一個(gè)實(shí)例有|V|個(gè)特征。 很容易看到,在我們的問(wèn)題中,一個(gè)獨(dú)特的特征包與一組具有相同顏色的頂點(diǎn)相對(duì)應(yīng),反之亦然。
理論1說(shuō)明多項(xiàng)式時(shí)間中求解這個(gè)NP難問(wèn)題不可行。為了尋找好的近似算法,我們將最優(yōu)捆綁問(wèn)題歸結(jié)為圖著色問(wèn)題,如果兩個(gè)特征之間不是相互排斥,那么我們用一個(gè)邊將他們連接,然后用合理的貪婪算法(具有恒定的近似比)用于圖著色來(lái)做特征捆綁。 此外,我們注意到通常有很多特征,盡管不是100%相互排斥的,也很少同時(shí)取非零值。 如果我們的算法可以允許一小部分的沖突,我們可以得到更少的特征包,進(jìn)一步提高計(jì)算效率。經(jīng)過(guò)簡(jiǎn)單的計(jì)算,隨機(jī)污染小部分特征值將影響精度最多O([(1–γ)n]?2/3),γ是每個(gè)綁定中的最大沖突比率,當(dāng)其相對(duì)較小時(shí),能夠完成精度和效率之間的平衡。
基于上面的討論,我們?cè)O(shè)計(jì)了算法3,偽代碼見(jiàn)下圖,具體算法:
建立一個(gè)圖,每個(gè)點(diǎn)代表特征,每個(gè)邊有權(quán)重,其權(quán)重和特征之間總體沖突相關(guān)。
按照降序排列圖中的度數(shù)來(lái)排序特征。
檢查排序之后的每個(gè)特征,對(duì)他進(jìn)行特征綁定或者建立新的綁定使得操作之后的總體沖突最小。
算法3的時(shí)間復(fù)雜度是O(feature2),訓(xùn)練之前只處理一次,其時(shí)間復(fù)雜度在特征不是特別多的情況下是可以接受的,但難以應(yīng)對(duì)百萬(wàn)維的特征。為了繼續(xù)提高效率,我們提出了一個(gè)更加高效的無(wú)圖的排序策略:將特征按照非零值個(gè)數(shù)排序,這和使用圖節(jié)點(diǎn)的度排序相似,因?yàn)楦嗟姆橇阒低ǔ?huì)導(dǎo)致沖突,新算法在算法3基礎(chǔ)上改變了排序策略。
merging features(特征合并)
如何合并同一個(gè)bundle的特征來(lái)降低訓(xùn)練時(shí)間復(fù)雜度。關(guān)鍵在于原始特征值可以從bundle中區(qū)分出來(lái)。鑒于直方圖算法存儲(chǔ)離散值而不是連續(xù)特征值,我們通過(guò)將互斥特征放在不同的箱中來(lái)構(gòu)建bundle。這可以通過(guò)將偏移量添加到特征原始值中實(shí)現(xiàn),例如,假設(shè)bundle中有兩個(gè)特征,原始特征A取值[0, 10],B取值[0, 20]。我們添加偏移量10到B中,因此B取值[10, 30]。通過(guò)這種做法,就可以安全地將A、B特征合并,使用一個(gè)取值[0, 30]的特征取代AB。算法見(jiàn)算法4,
EFB算法能夠?qū)⒃S多互斥的特征變?yōu)榈途S稠密的特征,就能夠有效的避免不必要0值特征的計(jì)算。實(shí)際,通過(guò)用表記錄數(shù)據(jù)中的非零值,來(lái)忽略零值特征,達(dá)到優(yōu)化基礎(chǔ)的直方圖算法。通過(guò)掃描表中的數(shù)據(jù),建直方圖的時(shí)間復(fù)雜度將從O(#data)降到O(#non_zero_data)。當(dāng)然,這種方法在構(gòu)建樹(shù)過(guò)程中需要而額外的內(nèi)存和計(jì)算開(kāi)銷(xiāo)來(lái)維持預(yù)特征表。我們?cè)趌ightGBM中將此優(yōu)化作為基本函數(shù),因?yàn)楫?dāng)bundles是稀疏的時(shí)候,這個(gè)優(yōu)化與EFB不沖突(可以用于EFB)。
參考鏈接:https://blog.csdn.net/shine19930820/article/details/79123216
針對(duì) Leaf-wise(Best-first)樹(shù)的參數(shù)優(yōu)化
(1)num_leaves這是控制樹(shù)模型復(fù)雜度的主要參數(shù)。理論上, 借鑒 depth-wise 樹(shù), 我們可以設(shè)置 num_leaves= 但是, 這種簡(jiǎn)單的轉(zhuǎn)化在實(shí)際應(yīng)用中表現(xiàn)不佳. 這是因?yàn)? 當(dāng)葉子數(shù)目相同時(shí), leaf-wise 樹(shù)要比 depth-wise 樹(shù)深得多, 這就有可能導(dǎo)致過(guò)擬合. 因此, 當(dāng)我們?cè)囍{(diào)整 num_leaves 的取值時(shí), 應(yīng)該讓其小于 . 舉個(gè)例子, 當(dāng) max_depth=7時(shí),depth-wise 樹(shù)可以達(dá)到較高的準(zhǔn)確率.但是如果設(shè)置 num_leaves 為 128 時(shí), 有可能會(huì)導(dǎo)致過(guò)擬合, 而將其設(shè)置為 70 或 80 時(shí)可能會(huì)得到比 depth-wise 樹(shù)更高的準(zhǔn)確率. 其實(shí), depth 的概念在 leaf-wise 樹(shù)中并沒(méi)有多大作用, 因?yàn)椴⒉淮嬖谝粋€(gè)從 leaves 到 depth 的合理映射。
(2)min_data_in_leaf. 這是處理 leaf-wise 樹(shù)的過(guò)擬合問(wèn)題中一個(gè)非常重要的參數(shù). 它的值取決于訓(xùn)練數(shù)據(jù)的樣本個(gè)樹(shù)和 num_leaves. 將其設(shè)置的較大可以避免生成一個(gè)過(guò)深的樹(shù), 但有可能導(dǎo)致欠擬合. 實(shí)際應(yīng)用中, 對(duì)于大數(shù)據(jù)集, 設(shè)置其為幾百或幾千就足夠了。
(3)max_depth(默認(rèn)不限制,一般設(shè)置該值為5—10即可) 你也可以利用 max_depth 來(lái)顯式地限制樹(shù)的深度。
5.2 針對(duì)更快的訓(xùn)練速度
(1)通過(guò)設(shè)置 bagging_fraction 和 bagging_freq 參數(shù)來(lái)使用 bagging 方法;(2)通過(guò)設(shè)置 feature_fraction 參數(shù)來(lái)使用特征的子抽樣;(3)使用較小的 max_bin;(4)使用 save_binary 在以后的學(xué)習(xí)過(guò)程對(duì)數(shù)據(jù)進(jìn)行加速加載。5.3 針對(duì)更好的準(zhǔn)確率
(1)使用較大的 max_bin (學(xué)習(xí)速度可能變慢);(2)使用較小的 learning_rate 和較大的 num_iterations;(3)使用較大的 num_leaves (可能導(dǎo)致過(guò)擬合);(4)使用更大的訓(xùn)練數(shù)據(jù);(5)嘗試 dart(一種在多元Additive回歸樹(shù)種使用dropouts的算法).5.4 處理過(guò)擬合
(1)使用較小的 max_bin(默認(rèn)為255)(2)使用較小的 num_leaves(默認(rèn)為31)(3)使用 min_data_in_leaf(默認(rèn)為20) 和 min_sum_hessian_in_leaf(默認(rèn)為)(4)通過(guò)設(shè)置 bagging_fraction (默認(rèn)為1.0)和 bagging_freq (默認(rèn)為0,意味著禁用bagging,k表示每k次迭代執(zhí)行一個(gè)bagging)來(lái)使用 bagging(5)通過(guò)設(shè)置 feature_fraction(默認(rèn)為1.0) 來(lái)使用特征子抽樣(6)使用更大的訓(xùn)練數(shù)據(jù)(7)使用 lambda_l1(默認(rèn)為0), lambda_l2 (默認(rèn)為0)和 min_split_gain(默認(rèn)為0,表示執(zhí)行切分的最小增益) 來(lái)使用正則(8)嘗試 max_depth 來(lái)避免生成過(guò)深的樹(shù)具體想要了解更多內(nèi)容請(qǐng)參考:
https://blog.csdn.net/qq_24519677/article/details/82811215
附上python3代碼
#數(shù)據(jù)預(yù)處理 import numpy as np import matplotlib.pyplot as plt import pandas as pd # Importing the dataset dataset = pd.read_csv('...input\\Social_Network_Ads.csv') X = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values # Splitting the dataset into the Training set and Test set from sklearn.cross_validation import train_test_split x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0) # Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test) #模型構(gòu)建和訓(xùn)練 import lightgbm as lgb d_train = lgb.Dataset(x_train, label=y_train) params = {} params['learning_rate'] = 0.003 params['boosting_type'] = 'gbdt' params['objective'] = 'binary' params['metric'] = 'binary_logloss' params['sub_feature'] = 0.5 params['num_leaves'] = 10 params['min_data'] = 50 params['max_depth'] = 10 clf = lgb.train(params, d_train, 100) #模型預(yù)測(cè) #Prediction y_pred=clf.predict(x_test) #convert into binary values for i in range(0,99): if y_pred[i]>=.5: # setting threshold to .5 y_pred[i]=1 else: y_pred[i]=0 #準(zhǔn)確率計(jì)算 #Confusion matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) #Accuracy from sklearn.metrics import accuracy_score accuracy=accuracy_score(y_pred,y_test)結(jié)果:
調(diào)參:
數(shù)據(jù)科學(xué)家在使用參數(shù)的時(shí)候,總是很掙扎。理想的參數(shù)應(yīng)該長(zhǎng)什么樣呢?下面的一組練習(xí)可以用來(lái)提升你的模型效率。
num_leaves: 這個(gè)是控制樹(shù)的復(fù)雜度的主要的參數(shù)。理想情況下,葉子的數(shù)量的值應(yīng)該小于等于 $2^{max_depth}$,大于這個(gè)值會(huì)導(dǎo)致過(guò)擬合。 mindatain_leaf: 設(shè)置成一個(gè)比較大的值可以避免樹(shù)生長(zhǎng)太深,但是可能會(huì)導(dǎo)致過(guò)擬合。實(shí)際使用中,對(duì)于大數(shù)據(jù)集設(shè)置成幾百到幾千就足夠了。maxdepth: 你可以使用maxdepth來(lái)顯式的限制深度。追求速度:
通過(guò)設(shè)置 bagging_fraction 和 bagging_freq來(lái)使用bagging通過(guò)設(shè)置 feature_fraction來(lái)使用特征下采樣使用小的 max_bin使用 save_binary 來(lái)加速加載數(shù)據(jù)使用并行學(xué)習(xí),參考parallel learning guide追求更高的準(zhǔn)確率:
使用大的 max_bin (可能速度會(huì)慢)使用小 learning_rate 大的 num_iterations使用大的 num_leaves(可能會(huì)過(guò)擬合)使用大訓(xùn)練數(shù)據(jù)集試試 dart嘗試直接使用類(lèi)別特征處理過(guò)擬合:使用小的 max_bin使用小的 num_leaves使用 min_data_in_leaf 和 min_sum_hessian_in_leaf通過(guò)設(shè)置 bagging_fraction 和 bagging_freq來(lái)使用bagging通過(guò)設(shè)置 feature_fraction來(lái)使用特征下采樣`使用大訓(xùn)練數(shù)據(jù)集嘗試使用 lambda_l1, lambda_l2 和 min_gain_to_split 來(lái)進(jìn)行正則化嘗試使用 max_depth 來(lái)避免生成的樹(shù)太深總結(jié)
以上是生活随笔為你收集整理的LightGBM算法详解(教你一文掌握LightGBM所有知识点)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 64位office无法安装
- 下一篇: “跑路风波”的内在缘由?P2P网络信贷将