gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客
注意,下文的原始的gbdt是以sklearn中的gbdt的實現(xiàn)為例子來闡述的,因為gbdt的改進(jìn)版本有很多,為了敘述方便,使用這個最為人所知的實現(xiàn)來描述。
- 你有自己用過別的模型然后調(diào)參之類的嗎?能說一下基本的調(diào)參流程嗎?XGB知道嗎,以XGB為例子說一下調(diào)參流程吧
(個人的思路):一般來說采用貝葉斯優(yōu)化或者遺傳算法等啟發(fā)式的優(yōu)化算法確定相對最佳參數(shù)(如果不熟悉的話用隨機搜索也是可以的,或者網(wǎng)格搜索但是參數(shù)得到步長設(shè)置的很大,一步一步確定相對最優(yōu)參數(shù)的區(qū)間),然后再根據(jù)實際的模型在驗證集上的表現(xiàn)做一些微調(diào),對于過擬合優(yōu)先調(diào)整max_depth和樹的數(shù)量,在實際使用過程中這兩個參數(shù)對于模型的整體效果影響很大很明顯。對于欠擬合,反著來就行了。
- XGB和GBDT的區(qū)別有哪些?
1、算法層面:
(1)損失函數(shù)的二階泰勒展開;(具體的二階泰勒展開的闡述下面那點會詳細(xì)描述)
(2)樹的正則化概念的引入,對葉節(jié)點數(shù)量和葉子節(jié)點輸出進(jìn)行了約束,方式是將二者形成的約束項加入損失函數(shù)中;
(3)二階泰勒展開與樹正則化推出了新的葉子節(jié)點輸出的計算公式而不是原始gbdt那樣的簡單平均;
(4)a、對于基礎(chǔ)學(xué)習(xí)器的改進(jìn),
分裂的時候自動根據(jù)是否產(chǎn)生正增益指導(dǎo)是否進(jìn)行分裂,因為引入了正則項的概念,分裂的時候這個預(yù)剪枝更加嚴(yán)苛;
b、對于缺失值的處理,xgboost根據(jù)左右子節(jié)點的增益大小將缺失值分到增益大的節(jié)點中,而sklearn中的gbdt是無法處理缺失值的,因為sklearn中的gbdt是以sklearn中的cart為基學(xué)習(xí)器的,而sklearn中的cart也并沒有實現(xiàn)對缺失值的處理功能。
(5)學(xué)習(xí)率,Shrinkage,對每一顆樹都乘以小于1的學(xué)習(xí)率,來削弱每一顆樹的影響,這樣的結(jié)果就是會引入更多的樹來處理使得基學(xué)習(xí)器得數(shù)量變多,從而降低過擬合,不過其實sklearn中的gbdt也實現(xiàn)了。。。不知道為什么這么多人把這一點也列為不同;
(6)、引入了隨機森林使用的列采樣功能,便于降低過擬合;
(7)、引入了許多近似直方圖之類的優(yōu)化算法來進(jìn)一步提高樹的訓(xùn)練速度與抗過擬合的能力,這個比較復(fù)雜,因為實現(xiàn)了很多種算法,后面單獨寫一篇來總結(jié);
2、工程層面
(1)、對每個特征進(jìn)行分塊(block)并排序(pre_sort),將排序后的結(jié)構(gòu)保存在內(nèi)存中,這樣后續(xù)分裂的時候就不需要重復(fù)對特征進(jìn)行排序然后計算最佳分裂點了,并且能夠進(jìn)行并行化計算.這個結(jié)構(gòu)加速了split finding的過程,只需要在建樹前排序一次,后面節(jié)點分裂時直接根據(jù)索引得到梯度信息。
(2)
金貴濤:對xgboost的理解?zhuanlan.zhihu.com其它更復(fù)雜的工程優(yōu)化處理見這里。。。。
為什么xgb用二階導(dǎo):
1、形式上的統(tǒng)一:
下面來自xgb的官網(wǎng)敘述:
可以看到,損失函數(shù)為mse的時候,注意,此時我們沒有進(jìn)行二階泰勒展開
對比可以看到,其它損失函數(shù)泰勒展開之后去掉常數(shù)最終的形式和mse的不泰勒展開的形式是完全一致的(mse的二階梯為常數(shù)1,一階梯度是y_pred-y_True),這么做的好處是,這樣的話,1、 xgboost在對mse的損失函數(shù)設(shè)計完求解器之后,這一套代碼可以直接復(fù)用給別的損失函數(shù)來使用,因為我們?nèi)绻蛔龆A泰勒展開的話,比如新的損失函數(shù)是二元交叉熵,在工程設(shè)計上,我們還要將損失函數(shù)的求導(dǎo),然后把求導(dǎo)之后的式子寫出來:
二元交叉熵的一階梯度設(shè)計一個新的求解器去求解,很麻煩。
而進(jìn)行了這樣的設(shè)計之后,后續(xù)如果還有一些什么別的損失函數(shù),底層的求解mse的代碼可以直接使用,使用者只需要自行去求解新的損失函數(shù)的一階梯度和二階梯度的表達(dá)式,然后通過xgboost的自定義損失函數(shù)的功能就可以實現(xiàn)使用完備的xgboost的框架來求解自己的損失函數(shù)的最優(yōu)值了。
2、關(guān)于速度的問題,gbdt的前向分布的求解思路可以說就和我們常見的邏輯回歸求解的梯度下降是類似的,線性回歸的梯度下降每一輪通過更新參數(shù)的方式接近損失函數(shù)的最優(yōu)值,而gbdt則是用基學(xué)習(xí)器去擬合,相對而言,xgboost類似于使用牛頓法來求解線性回歸,所以下面從牛頓和梯度下降的角度來闡述,的實際上我們常說的牛頓法比梯度下降法快是不準(zhǔn)確的,應(yīng)該是牛頓法的收斂速度要比梯度下降法快,也就是說牛頓法使用的迭代次數(shù)相對于梯度下降法要更少,但是由于涉及到計算二階導(dǎo)的信息,牛頓法不一定在算法訓(xùn)練的時間上總比梯度下降法快,只是相對于梯度下降法而言,更少的迭代達(dá)到最優(yōu),這一點來看,并不算是優(yōu)勢。
沒明白為什么有人說xgboost的二階泰勒展開要更快???希望有大佬來解釋一下這個問題。
- xgb怎么梯度下降的:
和gbdt是一樣的,t-1輪的所有的子數(shù)的總預(yù)測值和真實值進(jìn)入損失函數(shù)的負(fù)梯度的表達(dá)式計算得到負(fù)梯度作為第t輪要擬合的標(biāo)簽值。嚴(yán)格來說,這是前向分布算法,雖然他和梯度下降法的思路非常相似,但是梯度下降法對于每一輪的負(fù)梯度的使用方法是作為上一輪參數(shù)的參數(shù)的更新量,而xgb是直接將其作為標(biāo)簽值用新的基學(xué)習(xí)器去擬合。
- xgb的正則化
葉子節(jié)點個數(shù)的正則化約束,參數(shù)為gamma,
葉子節(jié)點輸出值的正則化約束,參數(shù)是lambda。
XGB特征重要性程度是怎么判斷的?
xgb的特征重要性的方式衍生的非常花俏了。
官網(wǎng)上給出的方案,total_gain就是特征帶來的總的分裂增益,也就是我們常規(guī)意義上的分裂總增益,weight,被用來作為分裂節(jié)點的次數(shù),也就是我們常規(guī)意義上的分裂總次數(shù),gain=total_gain/weight,計算的是每一次分裂帶來的平均增益,total_cover表示特征分裂的樣本數(shù),舉個例子,假設(shè)初始樣本有10000個,第一次分裂的時候使用了特征A,也就是特征A在這10000個樣本上分裂,則此時的cover值為10000,假設(shè)根據(jù)特征A分裂出左枝的樣本有1000個,右邊有9000個,而在左枝特征B是最優(yōu)特征根據(jù)這1000個樣本進(jìn)行分裂,則B當(dāng)前的cover是1000,依次類推最后求和。
而cover顯然就是total_cover/weight,也就是平均每次分裂所“負(fù)責(zé)”的樣本數(shù)。
XGB很容易理解它的回歸和二分類,如何理解多分類呢?
https://www.cnblogs.com/always-fight/p/9400346.html?www.cnblogs.comGBDT用于分類問題 - 1直在路上1 - 博客園
GBDT用于分類問題 - 1直在路上1 - 博客園?www.cnblogs.com思路就是ovr,比如三分類,每一輪是生成3顆數(shù),不過損失函數(shù)還是用的多分類的損失函數(shù)比如常見的logloss,具體的可以見上面這篇文章寫的很清楚了。
XGB和LGB區(qū)別:
1、直方圖優(yōu)化,對連續(xù)特征進(jìn)行分桶,在損失了一定精度的情況下大大提升了運行速度,并且在gbm的框架下,基學(xué)習(xí)器的“不精確”分箱反而增強了整體的泛化性能;
2、goss 樹的引入;
3、efb,對稀疏特征做了“捆綁”的優(yōu)化功能;
4、直接支持對于類別特征進(jìn)行訓(xùn)練(實際上內(nèi)部是對類別特征做了類似編碼的操作了)
5、樹的生長方式由level-wise變成leaf-wise;
算法層面的優(yōu)化具體可見:
馬東什么:不手寫lightgbm(1)—怎么分桶的?zhuanlan.zhihu.com馬東什么:不手寫lightgbm(2)—其它的一些特性?zhuanlan.zhihu.com工程層面的優(yōu)化可見lightgbm原作者之一的知乎回答:
如何看待微軟新開源的LightGBM??www.zhihu.comxgboost與RF的對比
GBDT與RF區(qū)別
1、組成隨機森林的樹可以是分類樹,也可以是回歸樹;而GBDT只由回歸樹組成,GBDT的會累加所有樹的結(jié)果,而這種累加是無法通過分類完成的,因此GBDT的樹都是CART回歸樹,而不是分類樹(盡管GBDT調(diào)整后也可以用于分類但不代表GBDT的樹為分類樹)
2、組成隨機森林的樹可以并行生成;而GBDT只能是串行生成
3、對于最終的輸出結(jié)果而言,隨機森林采用多數(shù)投票或簡單平均等;而GBDT則是將所有結(jié)果累加起來,或者加權(quán)累加起來(存在學(xué)習(xí)率)
4、隨機森林對異常值不敏感,GBDT對異常值非常敏感
5、隨機森林對訓(xùn)練集一視同仁,GBDT是基于權(quán)值的弱分類器的集成
6、隨機森林是通過減少模型方差提高性能,GBDT是通過減少模型偏差提高性能,但是xgb引入了正則項和列采樣等等正則化手段之后,可以在少量增加偏差的情況下大幅度縮減模型的方差。
xgb的預(yù)排序算法是怎么做的呢?
將原始特征進(jìn)行排序之后以塊的形式保存到內(nèi)存中,在塊里面保存排序后的特征值及對應(yīng)樣本的引用,以便于獲取樣本的一階、二階導(dǎo)數(shù)值,但意味著除了保存原始特征之外還要保存原始特征的排序結(jié)果,耗內(nèi)存。
rf和xgb哪個對異常點更敏感
xgb明顯敏感的多,當(dāng)然對rf也是有一定影響的,rf的每棵數(shù)的生成是獨立的,異常點數(shù)量不多的情況下異常點常常和正常樣本中的某些樣本合并在一個分支里。
但是xgb不一樣,異常樣本的t-1輪的預(yù)測值和真實標(biāo)簽計算出來的負(fù)梯度會一直很大,假設(shè)當(dāng)?shù)竭_(dá)某一輪的時候,所有正常樣本的計算得到的負(fù)梯度都很小而異常樣本的負(fù)梯度很大例如【0.0000001,0.0000001,0.0000001,0.0000001,0.0000001,10】,這個時候新樹會可能會繼續(xù)進(jìn)行不正常的分裂為[0.0000001,0.0000001,0.0000001,0.0000001,0.0000001],[10],而這樣的分裂是不合理的,因為異常值本身可能是因為某些人為失誤導(dǎo)致的數(shù)據(jù)記錄錯誤,或者異常樣本完全是屬于另外一種分布,此時強制要進(jìn)行模型訓(xùn)練會導(dǎo)致模型的結(jié)果有偏從而發(fā)生過擬合。
當(dāng)然異常樣本數(shù)量很少比如10個以內(nèi)的時候而正常樣本有100000000個其實基本沒什么影響,但是如果占比較高的話是會產(chǎn)生影響的。
xgb何時停止分裂?
1、人工設(shè)定的參數(shù),max_depth,min_data_in_leaf等等,這類通過超參數(shù)形式限制樹的復(fù)雜度的方法都會引發(fā)xgb的分裂的停止,也就是常說的預(yù)剪枝;
2、人工不限制,自由生長的情況下,當(dāng)分裂增益小于0則基學(xué)習(xí)器停止分裂
XGB怎么解決過擬合?怎么剪枝?怎么選擇特征?
葉節(jié)點個數(shù)和葉節(jié)點權(quán)重(輸出值)樹的正則項,各種預(yù)剪枝的超參數(shù)(最大深度、最大葉節(jié)點個數(shù)、最小分裂增益、學(xué)習(xí)率、早停等等)控制樹結(jié)構(gòu)的復(fù)雜度,行列采樣的引入、以及各類近似算法等。每輪計算所有特征各自的最佳分裂點,比較所有特征按照最佳分裂點分裂之后的分裂增益大小,使用分裂增益最大的特征在其最佳分裂點分裂一次,然后繼續(xù)循環(huán)。。。。。
對比一下XGB和lightGBM在節(jié)點分裂時候的區(qū)別
xgb是level-wise,lgb是leaf-wise,level-wise指在樹分裂的過程中,同一層的非葉子節(jié)點,只要繼續(xù)分裂能夠產(chǎn)生正的增益就繼續(xù)分裂下去,而leaf-wise更苛刻一點,同一層的非葉子節(jié)點,僅僅選擇分裂增益最大的葉子節(jié)點進(jìn)行分裂。
Lgb相對于xgb的優(yōu)缺點
優(yōu)點:直方圖算法—更高(效率)更快(速度)更低(內(nèi)存占用)更泛化(分箱與之后的不精確分割也起到了一定防止過擬合的作用);
缺點:直方圖較為粗糙,會損失一定精度,但是在gbm的框架下,基學(xué)習(xí)器的精度損失可以通過引入更多的tree來彌補。
Xgb葉子節(jié)點怎么計算值的
損失函數(shù)引入樹正則化概念并二階泰勒展開,去掉常數(shù)項之后得到最終的xgb損失函數(shù)的形式:,
然后根據(jù)此損失函數(shù)推導(dǎo)得到葉節(jié)點的計算公式
2.xgb與lr相比優(yōu)缺點在哪里?
這類問題是一個很廣的問題,涉及到不同算法的適用性,這個后面單獨總結(jié)一下吧
xgb中l(wèi)1正則怎么用的
xgb中l(wèi)1表示對葉節(jié)點個數(shù)的約束項的系數(shù),而l2則是葉子節(jié)點權(quán)重的約束項系數(shù)。
6、xgboost對特征缺失敏感嗎,對缺失值做了什么操作,存在什么問題
不敏感,可以自動處理,處理方式是將missing值分別加入左節(jié)點 右節(jié)點取分裂增益最大的節(jié)點將missing樣本分裂進(jìn)這個節(jié)點 。這種處理方式的問題在xgboost僅僅在特征的非缺失的值上進(jìn)行分裂然后missing值直接放入其中一個節(jié)點,顯然當(dāng)缺失值很多的情況下,比如缺失80%,那么xgb分裂的時候僅僅在20%的特征值上分裂,這是非常容易過擬合的。
7、xgb和lgb在特征、數(shù)據(jù)并行上存在什么差異?
lgbm特征并行的前提是每個worker留有一份完整的數(shù)據(jù)集,但是每個worker僅在特征子集上進(jìn)行最佳切分點的尋找;worker之間需要相互通信,通過比對損失來確定最佳切分點;然后將這個最佳切分點的位置進(jìn)行全局廣播,每個worker進(jìn)行切分即可。
xgb的特征并行與lgbm的最大不同在于xgb每個worker節(jié)點中僅有部分的列數(shù)據(jù),也就是垂直切分,每個worker尋找局部最佳切分點,worker之間相互通信,然后在具有最佳切分點的worker上進(jìn)行節(jié)點分裂,再由這個節(jié)點廣播一下被切分到左右節(jié)點的樣本索引號,其他worker才能開始分裂。
二者的區(qū)別就導(dǎo)致了lgbm中worker間通信成本明顯降低,只需通信一個特征分裂點即可,而xgb中要廣播樣本索引。
2)數(shù)據(jù)并行
當(dāng)數(shù)據(jù)量很大,特征相對較少時,可采用數(shù)據(jù)并行策略。
lgbm中先對數(shù)據(jù)水平切分,每個worker上的數(shù)據(jù)先建立起局部的直方圖,然后合并成全局的直方圖,采用直方圖相減的方式,先計算樣本量少的節(jié)點的樣本索引,然后直接相減得到另一子節(jié)點的樣本索引,這個直方圖算法使得worker間的通信成本降低一倍,因為只用通信以此樣本量少的節(jié)點。
xgb中的數(shù)據(jù)并行也是水平切分,然后單個worker建立局部直方圖,再合并為全局,不同在于根據(jù)全局直方圖進(jìn)行各個worker上的節(jié)點分裂時會單獨計算子節(jié)點的樣本索引,因此效率賊慢,每個worker間的通信量也就變得很大。
3)投票并行(lgbm)
當(dāng)數(shù)據(jù)量和維度都很大時,選用投票并行,該方法是數(shù)據(jù)并行的一個改進(jìn)。數(shù)據(jù)并行中的合并直方圖的代價相對較大,尤其是當(dāng)特征維度很大時。
大致思想是:每個worker首先會找到本地的一些優(yōu)秀的特征,然后進(jìn)行全局投票,根據(jù)投票結(jié)果,選擇top的特征進(jìn)行直方圖的合并,再尋求全局的最優(yōu)分割點。這個方法我沒有找到很好的解釋,因此,面試過程中答出前面兩種我覺得就ok了吧。
為什么xgboost不用后剪枝
后剪枝計算代價太高了,合并一次葉節(jié)點就要計算一次測試集的表現(xiàn),數(shù)據(jù)量大的情況下非常消耗時間,而且也并不是特別必要,因為這樣很容易過擬合測試集。
4、GBDT和RF哪個樹比較深
第一種解釋: RF深。隨機森林的思路是用大量低偏差高方差的基學(xué)習(xí)器進(jìn)行集成,簡單平均(不過lightgbm中的rf貌似不太一樣,沒有細(xì)致研究過),降低方差,所以希望每一個基學(xué)習(xí)器的精度盡量高,如果隨機森林的基學(xué)習(xí)器偏差大,對于100個或者10000個精度為0.6的學(xué)習(xí)器,很難通過隨機森林的集成方式來達(dá)到好的效果;而gbdt本身就是對誤差的不斷擬合,本身就是一個偏差很低的集成框架,那么為了同時也使得方差縮小,需要基學(xué)習(xí)器的泛化性能好一些,避免整個框架的偏差很低但方差很大的窘境;
第二種解釋:隨機森林每一顆樹都是獨立的,每一顆樹都是以原始標(biāo)簽進(jìn)行訓(xùn)練的,在不進(jìn)行任何限制的情況下會生長的比較深,而gbdt不一樣,每一輪都是以上一輪的負(fù)梯度為新標(biāo)簽進(jìn)行訓(xùn)練,訓(xùn)練到一定程度的時候我們?nèi)ビ^察負(fù)梯度就可以發(fā)現(xiàn),因為很多樣本已經(jīng)得到很好的擬合,所以負(fù)梯度會比較小,比如可能是這樣的[0.000000001,0.000000001,0.000000001,0.0000000015......],這樣樹在分裂的時候?qū)嶋H上再進(jìn)行分裂的增益并不大,甚至分裂之后的增益反而減少,這就導(dǎo)致了基樹訓(xùn)練的時候很早就停止了,從而導(dǎo)致樹的深度降低。
為什么gbdt不能用分類樹?
分類樹無法處理連續(xù)值,負(fù)梯度一般都是連續(xù)值。
6 lightGBM直方圖加速原理? lightGBM處理類別變量的原理? lightGBM在特征分裂時相比GBDT和xgboost有什么優(yōu)化? lightGBM特征分裂加速的原理是什么?
馬東什么:不手寫lightgbm(1)—怎么分桶的?zhuanlan.zhihu.com馬東什么:不手寫lightgbm(2)—其它的一些特性?zhuanlan.zhihu.com如何看待微軟新開源的LightGBM??www.zhihu.com算法和工程方面的都在這里了。
2 lightGBM重要性怎么評估?
和xgb一樣。不過lgb中沒有cover這一評價方式。
3 lightGBM節(jié)點怎么分裂的?
這個問題,去github上看了問答才搞清楚,
馬東什么:不手寫lightgbm(1)—怎么分桶的?zhuanlan.zhihu.comWhat is the LightGBM splitting criterion? · Issue #1774 · microsoft/LightGBM?github.com已經(jīng)有人在github上提問了,按照開發(fā)者的意思,和xgboost是一樣的。
用的xgboost也許要對特征進(jìn)行標(biāo)準(zhǔn)化嗎?
不用做標(biāo)準(zhǔn)化,但是要對分布不穩(wěn)定的特征進(jìn)行處理,比如分箱,log變換之類的,因為我們交叉驗證的時候如果特征分布特別不規(guī)則,可能每一折的訓(xùn)練集和開發(fā)集上劃分到的特征差異性比較大,這是包括gbdt算法之外所有算法都 需要進(jìn)行處理的,機器學(xué)習(xí)的基本假設(shè)是同分布,如果不同數(shù)據(jù)集的特征分布差異性太大,這樣的特征沒法直接使用必須要轉(zhuǎn)換一下。
XGBoost或GBDT中怎么控制模型復(fù)雜度?XGBoost的參數(shù)選擇(怎么調(diào)參)。。。
自己看參數(shù)吧
1.xgboost怎么處理高維稀疏數(shù)據(jù)?
xgboost原理中的稀疏感知是關(guān)于缺失值的,
就是在非缺失的樣本上做分裂然后缺失值根據(jù)分別進(jìn)入左右節(jié)點帶來的增益來決定要劃分到哪個節(jié)點。如果是常規(guī)意義上的高基數(shù)類別特征進(jìn)行onehot之后的0-1矩陣,xgb沒有什么特別的處理方案。
數(shù)據(jù)標(biāo)簽值都在0-1000范圍之內(nèi),隨機森林和gbdt做回歸的值能否超過1000.
以原始的gbdt的葉子節(jié)點輸出為例,假設(shè)學(xué)習(xí)率為1,以mse為損失函數(shù)的情況下上面的式子可以變成:
其中n為這個葉子節(jié)點的樣本數(shù)量。。。。。這個問題。。。我還真沒想到什么答案。。。。
7、GBDT為什么用CART回歸樹做基學(xué)習(xí)器?
GBDT算法原理深入解析?xudongyang.coding.me這一篇說的很清晰。
基于梯度提升算法的學(xué)習(xí)器叫做GBM(Gradient Boosting Machine)。理論上,GBM可以選擇各種不同的學(xué)習(xí)算法作為基學(xué)習(xí)器。現(xiàn)實中,用得最多的基學(xué)習(xí)器是決策樹。為什么梯度提升方法傾向于選擇決策樹(通常是CART樹)作為基學(xué)習(xí)器呢?這與決策樹算法自身的優(yōu)點有很大的關(guān)系。決策樹可以認(rèn)為是if-then規(guī)則的集合,易于理解,可解釋性強,預(yù)測速度快。同時,決策樹算法相比于其他的算法需要更少的特征工程,比如可以不用做特征標(biāo)準(zhǔn)化,可以很好的處理字段缺失的數(shù)據(jù),也可以不用關(guān)心特征間是否相互依賴等。決策樹能夠自動組合多個特征,它可以毫無壓力地處理特征間的交互關(guān)系并且是非參數(shù)化的,因此你不必?fù)?dān)心異常值或者數(shù)據(jù)是否線性可分(舉個例子,決策樹能輕松處理好類別A在某個特征維度x的末端,類別B在中間,然后類別A又出現(xiàn)在特征維度x前端的情況)。不過,單獨使用決策樹算法時,有容易過擬合缺點。所幸的是,通過各種方法,抑制決策樹的復(fù)雜性,降低單顆決策樹的擬合能力,再通過梯度提升的方法集成多個決策樹,最終能夠很好的解決過擬合的問題。由此可見,梯度提升方法和決策樹學(xué)習(xí)算法可以互相取長補短,是一對完美的搭檔。至于抑制單顆決策樹的復(fù)雜度的方法有很多,比如限制樹的最大深度、限制葉子節(jié)點的最少樣本數(shù)量、限制節(jié)點分裂時的最少樣本數(shù)量、吸收bagging的思想對訓(xùn)練樣本采樣(subsample),在學(xué)習(xí)單顆決策樹時只使用一部分訓(xùn)練樣本、借鑒隨機森林的思路在學(xué)習(xí)單顆決策樹時只采樣一部分特征、在目標(biāo)函數(shù)中添加正則項懲罰復(fù)雜的樹結(jié)構(gòu)等。2、GBDT不擅長處理離散特征,你在應(yīng)用的時候是怎么處理的
GBDT不擅長處理高基數(shù)類別特征,如果基數(shù)低,問題也不大。原因可見:
馬東什么:為何常規(guī)的gbdt和決策樹不適用于高基數(shù)特征的場景?zhuanlan.zhihu.comlightgbm和catboost內(nèi)部對類別特征有自己的特征工程方案,而xgboost這類無法直接處理類別特征的庫則一般來說:1、單值離散用編碼的方法;2、多值離散用embedding
6、GBDT在回歸和多分類當(dāng)中有什么不同,在預(yù)測的時候的流程是怎樣的
損失函數(shù)不同(廢話),預(yù)測存在差異。
回歸則直接加權(quán)求和輸出全部基學(xué)習(xí)器的預(yù)測結(jié)果,分類還要將預(yù)測結(jié)果加權(quán)求和的結(jié)果放到sigmoid或者softmax里面轉(zhuǎn)化為概率值。
1,gbdt如果損失函數(shù)換成exponent會怎樣,有什么變化?
變成adaboost。
具體可見:
(boost框架的歷史回顧中,有空補上)
3.GBDT在什么情況下比邏輯回歸算法要差?
高維稀疏的數(shù)據(jù)集,gbdt對維度超高的稀疏數(shù)據(jù)集,其正則項約束基本沒用,并且決策空間會變成太多零散的決策小空間,具體可見上gbdt為何不好處理高基數(shù)類別特征的問題。
而lr的l1正則項可以很好的約束沒啥用 的稀疏特征,直接w置0即可。
4、GBDT對輸入數(shù)據(jù)有什么要求,如果效果比較差,可能是什么原因造成的?
如果訓(xùn)練集的效果很差,說明原始數(shù)據(jù)相對于gbdt算法來說實在太差了,特征基本沒什么區(qū)分度,xgb這種擬合能力超強的算法都無法很好的擬合;
如果訓(xùn)練集的效果很好測試集很差,并且二者的差距非常大(比如10個點以上),考慮特征分布的問題,應(yīng)該是有一些強特的分布在訓(xùn)練集和測試集上差異太大了。
如果訓(xùn)練集效果很好,測試集稍差一點,二者差異并不是很大,考慮調(diào)參。
xgb和lgb的并行實現(xiàn)的比較
1)特征并行
lgbm特征并行的前提是每個worker留有一份完整的數(shù)據(jù)集,但是每個worker僅在特征子集上進(jìn)行最佳切分點的尋找;worker之間需要相互通信,通過比對損失來確定最佳切分點;然后將這個最佳切分點的位置進(jìn)行全局廣播,每個worker進(jìn)行切分即可。
簡單說就是lgb的每一個worker處理一個特征,按列來拆分到多個worker上進(jìn)行計算的
xgb的特征并行與lgbm的最大不同在于xgb每個worker節(jié)點中僅有部分的列數(shù)據(jù),也就是垂直切分,每個worker尋找局部最佳切分點,worker之間相互通信,然后在具有最佳切分點的worker上進(jìn)行節(jié)點分裂,再由這個節(jié)點廣播一下被切分到左右節(jié)點的樣本索引號,其他worker才能開始分裂。
簡單說就是xgb的每一個worker處理所有特征,但是每個worker只處理一部分取值范圍里的最佳切分點,比如5個worker對一個特征的取值范圍切分為5份,在每一份上計算最佳切分點,然后5份上的5個最佳切分點做比較取最好
一個是豎著切分,一個是橫著切分。
二者的區(qū)別就導(dǎo)致了lgbm中worker間通信成本明顯降低,只需通信一個特征分裂點即可,而xgb中要廣播樣本索引。
2)數(shù)據(jù)并行
當(dāng)數(shù)據(jù)量很大,特征相對較少時,可采用數(shù)據(jù)并行策略。
lgbm中先對數(shù)據(jù)水平切分,每個worker上的數(shù)據(jù)先建立起局部的直方圖,然后合并成全局的直方圖,采用直方圖相減的方式,先計算樣本量少的節(jié)點的樣本索引,然后直接相減得到另一子節(jié)點的樣本索引,這個直方圖算法使得worker間的通信成本降低一倍,因為只用通信以此樣本量少的節(jié)點。
xgb中的數(shù)據(jù)并行也是水平切分,然后單個worker建立局部直方圖,再合并為全局,不同在于根據(jù)全局直方圖進(jìn)行各個worker上的節(jié)點分裂時會單獨計算子節(jié)點的樣本索引,因此效率賊慢,每個worker間的通信量也就變得很大。
3)投票并行(lgbm)
當(dāng)數(shù)據(jù)量和維度都很大時,選用投票并行,該方法是數(shù)據(jù)并行的一個改進(jìn)。數(shù)據(jù)并行中的合并直方圖的代價相對較大,尤其是當(dāng)特征維度很大時。
大致思想是:每個worker首先會找到本地的一些優(yōu)秀的特征,然后進(jìn)行全局投票,根據(jù)投票結(jié)果,選擇top的特征進(jìn)行直方圖的合并,再尋求全局的最優(yōu)分割點。這個方法。。。不懂,上述都是搬運來的。。
xgboost有哪些參數(shù)?
-學(xué)習(xí)率 eta :學(xué)習(xí)率越小,迭代次數(shù)越多。
-最小孩子權(quán)重 min-child-weight:控制葉子結(jié)點中二階導(dǎo)數(shù)和的最小值,即樣本的數(shù)量越少(由于h大約均在0.01附近),越容易過擬合
-最大深度 max_depth
-最大葉子結(jié)點數(shù) max_leaf_node
-后剪枝參數(shù)gamma
-L2參數(shù)lambda
-L1參數(shù)alpha (控制模型復(fù)雜度)
-樣本隨機采樣 subsample;列采樣比例 colsample_bytree
(5)xgboost 有哪些優(yōu)點?
-樹節(jié)點分裂方法,利用近似算法,二階導(dǎo)數(shù)為權(quán)重值的分位數(shù)作為切分點
-自動學(xué)習(xí)特征缺失值的方向
-列抽樣(借鑒隨機森林),行抽樣
-學(xué)習(xí)率(eta)的shrinkage,增加迭代次數(shù)
-自定義損失函數(shù)
-特征預(yù)排序
(6)xgboost和gbdt的區(qū)別?
1)GBDT是以CART作為基分類器,xgboost支持線性分類器,其中線性分類器的xgboost相當(dāng)于正則化的邏輯回歸(分類問題)或
線性回歸(回歸問題)
2)GBDT的目標(biāo)函數(shù)含有一階信息,xgboost的目標(biāo)函數(shù)含有二階信息,最小化目標(biāo)函數(shù)可得關(guān)于函數(shù)空間f(t)的梯度迭代或牛頓迭代,
牛頓法能更快的收斂。同時xgboost加入了正則項,控制了模型的復(fù)雜度。
(7) Lightgbm對xgboost有哪些改進(jìn)?
-Histgram算法 將浮點型數(shù)值離散為K個,統(tǒng)計離散值的累積量,遍歷直方圖找最優(yōu)特征分裂點
-直方圖加速:葉子結(jié)點的直方圖可由父親結(jié)點的直方圖與兄弟結(jié)點的直方圖做差得到
-leave wise 選取信息增益最大的葉子結(jié)點繼續(xù)分裂(容易過擬合,利用max_depth參數(shù)控制)
14. xgboost里面的lambdarank的損失函數(shù)是什么?
15. xgboost在什么地方做的剪枝,怎么做的? 分裂,預(yù)剪枝;參數(shù),預(yù)剪枝。
16. xgboost如何分布式?特征分布式和數(shù)據(jù)分布式? 各有什么存在的問題?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 继电器rc吸收电路取值_继电器的工作原理
- 下一篇: php 获取 省份缩写,php获取客户端