日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注意,下文的原始的gbdt是以sklearn中的gbdt的實現為例子來闡述的,因為gbdt的改進版本有很多,為了敘述方便,使用這個最為人所知的實現來描述。

  • 你有自己用過別的模型然后調參之類的嗎?能說一下基本的調參流程嗎?XGB知道嗎,以XGB為例子說一下調參流程吧

(個人的思路):一般來說采用貝葉斯優化或者遺傳算法等啟發式的優化算法確定相對最佳參數(如果不熟悉的話用隨機搜索也是可以的,或者網格搜索但是參數得到步長設置的很大,一步一步確定相對最優參數的區間),然后再根據實際的模型在驗證集上的表現做一些微調,對于過擬合優先調整max_depth和樹的數量,在實際使用過程中這兩個參數對于模型的整體效果影響很大很明顯。對于欠擬合,反著來就行了。

  • XGB和GBDT的區別有哪些?

1、算法層面:

(1)損失函數的二階泰勒展開;(具體的二階泰勒展開的闡述下面那點會詳細描述)

(2)樹的正則化概念的引入,對葉節點數量和葉子節點輸出進行了約束,方式是將二者形成的約束項加入損失函數中;

(3)二階泰勒展開與樹正則化推出了新的葉子節點輸出的計算公式而不是原始gbdt那樣的簡單平均;

(4)a、對于基礎學習器的改進,

分裂的時候自動根據是否產生正增益指導是否進行分裂,因為引入了正則項的概念,分裂的時候這個預剪枝更加嚴苛;

b、對于缺失值的處理,xgboost根據左右子節點的增益大小將缺失值分到增益大的節點中,而sklearn中的gbdt是無法處理缺失值的,因為sklearn中的gbdt是以sklearn中的cart為基學習器的,而sklearn中的cart也并沒有實現對缺失值的處理功能。

(5)學習率,Shrinkage,對每一顆樹都乘以小于1的學習率,來削弱每一顆樹的影響,這樣的結果就是會引入更多的樹來處理使得基學習器得數量變多,從而降低過擬合,不過其實sklearn中的gbdt也實現了。。。不知道為什么這么多人把這一點也列為不同;

(6)、引入了隨機森林使用的列采樣功能,便于降低過擬合;

(7)、引入了許多近似直方圖之類的優化算法來進一步提高樹的訓練速度與抗過擬合的能力,這個比較復雜,因為實現了很多種算法,后面單獨寫一篇來總結;

2、工程層面

(1)、對每個特征進行分塊(block)并排序(pre_sort),將排序后的結構保存在內存中,這樣后續分裂的時候就不需要重復對特征進行排序然后計算最佳分裂點了,并且能夠進行并行化計算.這個結構加速了split finding的過程,只需要在建樹前排序一次,后面節點分裂時直接根據索引得到梯度信息。

(2)

金貴濤:對xgboost的理解?zhuanlan.zhihu.com

其它更復雜的工程優化處理見這里。。。。


為什么xgb用二階導:

1、形式上的統一:

下面來自xgb的官網敘述:

可以看到,損失函數為mse的時候,注意,此時我們沒有進行二階泰勒展開

對比可以看到,其它損失函數泰勒展開之后去掉常數最終的形式和mse的不泰勒展開的形式是完全一致的(mse的二階梯為常數1,一階梯度是y_pred-y_True),這么做的好處是,這樣的話,1、 xgboost在對mse的損失函數設計完求解器之后,這一套代碼可以直接復用給別的損失函數來使用,因為我們如果不做二階泰勒展開的話,比如新的損失函數是二元交叉熵,在工程設計上,我們還要將損失函數的求導,然后把求導之后的式子寫出來:

二元交叉熵的一階梯度

設計一個新的求解器去求解,很麻煩。

而進行了這樣的設計之后,后續如果還有一些什么別的損失函數,底層的求解mse的代碼可以直接使用,使用者只需要自行去求解新的損失函數的一階梯度和二階梯度的表達式,然后通過xgboost的自定義損失函數的功能就可以實現使用完備的xgboost的框架來求解自己的損失函數的最優值了。

2、關于速度的問題,gbdt的前向分布的求解思路可以說就和我們常見的邏輯回歸求解的梯度下降是類似的,線性回歸的梯度下降每一輪通過更新參數的方式接近損失函數的最優值,而gbdt則是用基學習器去擬合,相對而言,xgboost類似于使用牛頓法來求解線性回歸,所以下面從牛頓和梯度下降的角度來闡述,的實際上我們常說的牛頓法比梯度下降法快是不準確的,應該是牛頓法的收斂速度要比梯度下降法快,也就是說牛頓法使用的迭代次數相對于梯度下降法要更少,但是由于涉及到計算二階導的信息,牛頓法不一定在算法訓練的時間上總比梯度下降法快,只是相對于梯度下降法而言,更少的迭代達到最優,這一點來看,并不算是優勢。

沒明白為什么有人說xgboost的二階泰勒展開要更快???希望有大佬來解釋一下這個問題。


  • xgb怎么梯度下降的:

和gbdt是一樣的,t-1輪的所有的子數的總預測值和真實值進入損失函數的負梯度的表達式計算得到負梯度作為第t輪要擬合的標簽值。嚴格來說,這是前向分布算法,雖然他和梯度下降法的思路非常相似,但是梯度下降法對于每一輪的負梯度的使用方法是作為上一輪參數的參數的更新量,而xgb是直接將其作為標簽值用新的基學習器去擬合。

  • xgb的正則化

葉子節點個數的正則化約束,參數為gamma,

葉子節點輸出值的正則化約束,參數是lambda。

XGB特征重要性程度是怎么判斷的?

xgb的特征重要性的方式衍生的非常花俏了。

官網上給出的方案,total_gain就是特征帶來的總的分裂增益,也就是我們常規意義上的分裂總增益,weight,被用來作為分裂節點的次數,也就是我們常規意義上的分裂總次數,gain=total_gain/weight,計算的是每一次分裂帶來的平均增益,total_cover表示特征分裂的樣本數,舉個例子,假設初始樣本有10000個,第一次分裂的時候使用了特征A,也就是特征A在這10000個樣本上分裂,則此時的cover值為10000,假設根據特征A分裂出左枝的樣本有1000個,右邊有9000個,而在左枝特征B是最優特征根據這1000個樣本進行分裂,則B當前的cover是1000,依次類推最后求和。

而cover顯然就是total_cover/weight,也就是平均每次分裂所“負責”的樣本數。


XGB很容易理解它的回歸和二分類,如何理解多分類呢?

https://www.cnblogs.com/always-fight/p/9400346.html?www.cnblogs.com

GBDT用于分類問題 - 1直在路上1 - 博客園

GBDT用于分類問題 - 1直在路上1 - 博客園?www.cnblogs.com

思路就是ovr,比如三分類,每一輪是生成3顆數,不過損失函數還是用的多分類的損失函數比如常見的logloss,具體的可以見上面這篇文章寫的很清楚了。

XGB和LGB區別:

1、直方圖優化,對連續特征進行分桶,在損失了一定精度的情況下大大提升了運行速度,并且在gbm的框架下,基學習器的“不精確”分箱反而增強了整體的泛化性能;

2、goss 樹的引入;

3、efb,對稀疏特征做了“捆綁”的優化功能;

4、直接支持對于類別特征進行訓練(實際上內部是對類別特征做了類似編碼的操作了)

5、樹的生長方式由level-wise變成leaf-wise;

算法層面的優化具體可見:

馬東什么:不手寫lightgbm(1)—怎么分桶的?zhuanlan.zhihu.com馬東什么:不手寫lightgbm(2)—其它的一些特性?zhuanlan.zhihu.com

工程層面的優化可見lightgbm原作者之一的知乎回答:

如何看待微軟新開源的LightGBM??www.zhihu.com

xgboost與RF的對比

GBDT與RF區別

1、組成隨機森林的樹可以是分類樹,也可以是回歸樹;而GBDT只由回歸樹組成,GBDT的會累加所有樹的結果,而這種累加是無法通過分類完成的,因此GBDT的樹都是CART回歸樹,而不是分類樹(盡管GBDT調整后也可以用于分類但不代表GBDT的樹為分類樹)

2、組成隨機森林的樹可以并行生成;而GBDT只能是串行生成

3、對于最終的輸出結果而言,隨機森林采用多數投票或簡單平均等;而GBDT則是將所有結果累加起來,或者加權累加起來(存在學習率)

4、隨機森林對異常值不敏感,GBDT對異常值非常敏感

5、隨機森林對訓練集一視同仁,GBDT是基于權值的弱分類器的集成

6、隨機森林是通過減少模型方差提高性能,GBDT是通過減少模型偏差提高性能,但是xgb引入了正則項和列采樣等等正則化手段之后,可以在少量增加偏差的情況下大幅度縮減模型的方差。

xgb的預排序算法是怎么做的呢?

將原始特征進行排序之后以塊的形式保存到內存中,在塊里面保存排序后的特征值及對應樣本的引用,以便于獲取樣本的一階、二階導數值,但意味著除了保存原始特征之外還要保存原始特征的排序結果,耗內存。

rf和xgb哪個對異常點更敏感

xgb明顯敏感的多,當然對rf也是有一定影響的,rf的每棵數的生成是獨立的,異常點數量不多的情況下異常點常常和正常樣本中的某些樣本合并在一個分支里。

但是xgb不一樣,異常樣本的t-1輪的預測值和真實標簽計算出來的負梯度會一直很大,假設當到達某一輪的時候,所有正常樣本的計算得到的負梯度都很小而異常樣本的負梯度很大例如【0.0000001,0.0000001,0.0000001,0.0000001,0.0000001,10】,這個時候新樹會可能會繼續進行不正常的分裂為[0.0000001,0.0000001,0.0000001,0.0000001,0.0000001],[10],而這樣的分裂是不合理的,因為異常值本身可能是因為某些人為失誤導致的數據記錄錯誤,或者異常樣本完全是屬于另外一種分布,此時強制要進行模型訓練會導致模型的結果有偏從而發生過擬合。

當然異常樣本數量很少比如10個以內的時候而正常樣本有100000000個其實基本沒什么影響,但是如果占比較高的話是會產生影響的。

xgb何時停止分裂?

1、人工設定的參數,max_depth,min_data_in_leaf等等,這類通過超參數形式限制樹的復雜度的方法都會引發xgb的分裂的停止,也就是常說的預剪枝;

2、人工不限制,自由生長的情況下,當分裂增益小于0則基學習器停止分裂

XGB怎么解決過擬合?怎么剪枝?怎么選擇特征?

葉節點個數和葉節點權重(輸出值)樹的正則項,各種預剪枝的超參數(最大深度、最大葉節點個數、最小分裂增益、學習率、早停等等)控制樹結構的復雜度,行列采樣的引入、以及各類近似算法等。每輪計算所有特征各自的最佳分裂點,比較所有特征按照最佳分裂點分裂之后的分裂增益大小,使用分裂增益最大的特征在其最佳分裂點分裂一次,然后繼續循環。。。。。

對比一下XGB和lightGBM在節點分裂時候的區別

xgb是level-wise,lgb是leaf-wise,level-wise指在樹分裂的過程中,同一層的非葉子節點,只要繼續分裂能夠產生正的增益就繼續分裂下去,而leaf-wise更苛刻一點,同一層的非葉子節點,僅僅選擇分裂增益最大的葉子節點進行分裂。

Lgb相對于xgb的優缺點

優點:直方圖算法—更高(效率)更快(速度)更低(內存占用)更泛化(分箱與之后的不精確分割也起到了一定防止過擬合的作用);

缺點:直方圖較為粗糙,會損失一定精度,但是在gbm的框架下,基學習器的精度損失可以通過引入更多的tree來彌補。

Xgb葉子節點怎么計算值的

損失函數引入樹正則化概念并二階泰勒展開,去掉常數項之后得到最終的xgb損失函數的形式:,

然后根據此損失函數推導得到葉節點的計算公式

2.xgb與lr相比優缺點在哪里?

這類問題是一個很廣的問題,涉及到不同算法的適用性,這個后面單獨總結一下吧

xgb中l1正則怎么用的

xgb中l1表示對葉節點個數的約束項的系數,而l2則是葉子節點權重的約束項系數。

6、xgboost對特征缺失敏感嗎,對缺失值做了什么操作,存在什么問題

不敏感,可以自動處理,處理方式是將missing值分別加入左節點 右節點取分裂增益最大的節點將missing樣本分裂進這個節點 。這種處理方式的問題在xgboost僅僅在特征的非缺失的值上進行分裂然后missing值直接放入其中一個節點,顯然當缺失值很多的情況下,比如缺失80%,那么xgb分裂的時候僅僅在20%的特征值上分裂,這是非常容易過擬合的。

7、xgb和lgb在特征、數據并行上存在什么差異?

lgbm特征并行的前提是每個worker留有一份完整的數據集,但是每個worker僅在特征子集上進行最佳切分點的尋找;worker之間需要相互通信,通過比對損失來確定最佳切分點;然后將這個最佳切分點的位置進行全局廣播,每個worker進行切分即可。

xgb的特征并行與lgbm的最大不同在于xgb每個worker節點中僅有部分的列數據,也就是垂直切分,每個worker尋找局部最佳切分點,worker之間相互通信,然后在具有最佳切分點的worker上進行節點分裂,再由這個節點廣播一下被切分到左右節點的樣本索引號,其他worker才能開始分裂。

二者的區別就導致了lgbm中worker間通信成本明顯降低,只需通信一個特征分裂點即可,而xgb中要廣播樣本索引。

2)數據并行

當數據量很大,特征相對較少時,可采用數據并行策略。

lgbm中先對數據水平切分,每個worker上的數據先建立起局部的直方圖,然后合并成全局的直方圖,采用直方圖相減的方式,先計算樣本量少的節點的樣本索引,然后直接相減得到另一子節點的樣本索引,這個直方圖算法使得worker間的通信成本降低一倍,因為只用通信以此樣本量少的節點。

xgb中的數據并行也是水平切分,然后單個worker建立局部直方圖,再合并為全局,不同在于根據全局直方圖進行各個worker上的節點分裂時會單獨計算子節點的樣本索引,因此效率賊慢,每個worker間的通信量也就變得很大。

3)投票并行(lgbm)

當數據量和維度都很大時,選用投票并行,該方法是數據并行的一個改進。數據并行中的合并直方圖的代價相對較大,尤其是當特征維度很大時。

大致思想是:每個worker首先會找到本地的一些優秀的特征,然后進行全局投票,根據投票結果,選擇top的特征進行直方圖的合并,再尋求全局的最優分割點。這個方法我沒有找到很好的解釋,因此,面試過程中答出前面兩種我覺得就ok了吧。

為什么xgboost不用后剪枝

后剪枝計算代價太高了,合并一次葉節點就要計算一次測試集的表現,數據量大的情況下非常消耗時間,而且也并不是特別必要,因為這樣很容易過擬合測試集。

4、GBDT和RF哪個樹比較深

第一種解釋: RF深。隨機森林的思路是用大量低偏差高方差的基學習器進行集成,簡單平均(不過lightgbm中的rf貌似不太一樣,沒有細致研究過),降低方差,所以希望每一個基學習器的精度盡量高,如果隨機森林的基學習器偏差大,對于100個或者10000個精度為0.6的學習器,很難通過隨機森林的集成方式來達到好的效果;而gbdt本身就是對誤差的不斷擬合,本身就是一個偏差很低的集成框架,那么為了同時也使得方差縮小,需要基學習器的泛化性能好一些,避免整個框架的偏差很低但方差很大的窘境;

第二種解釋:隨機森林每一顆樹都是獨立的,每一顆樹都是以原始標簽進行訓練的,在不進行任何限制的情況下會生長的比較深,而gbdt不一樣,每一輪都是以上一輪的負梯度為新標簽進行訓練,訓練到一定程度的時候我們去觀察負梯度就可以發現,因為很多樣本已經得到很好的擬合,所以負梯度會比較小,比如可能是這樣的[0.000000001,0.000000001,0.000000001,0.0000000015......],這樣樹在分裂的時候實際上再進行分裂的增益并不大,甚至分裂之后的增益反而減少,這就導致了基樹訓練的時候很早就停止了,從而導致樹的深度降低。

為什么gbdt不能用分類樹?

分類樹無法處理連續值,負梯度一般都是連續值。

6 lightGBM直方圖加速原理? lightGBM處理類別變量的原理? lightGBM在特征分裂時相比GBDT和xgboost有什么優化? lightGBM特征分裂加速的原理是什么?

馬東什么:不手寫lightgbm(1)—怎么分桶的?zhuanlan.zhihu.com馬東什么:不手寫lightgbm(2)—其它的一些特性?zhuanlan.zhihu.com如何看待微軟新開源的LightGBM??www.zhihu.com

算法和工程方面的都在這里了。

2 lightGBM重要性怎么評估?

和xgb一樣。不過lgb中沒有cover這一評價方式。

3 lightGBM節點怎么分裂的?

這個問題,去github上看了問答才搞清楚,

馬東什么:不手寫lightgbm(1)—怎么分桶的?zhuanlan.zhihu.comWhat is the LightGBM splitting criterion? · Issue #1774 · microsoft/LightGBM?github.com

已經有人在github上提問了,按照開發者的意思,和xgboost是一樣的。

用的xgboost也許要對特征進行標準化嗎?

不用做標準化,但是要對分布不穩定的特征進行處理,比如分箱,log變換之類的,因為我們交叉驗證的時候如果特征分布特別不規則,可能每一折的訓練集和開發集上劃分到的特征差異性比較大,這是包括gbdt算法之外所有算法都 需要進行處理的,機器學習的基本假設是同分布,如果不同數據集的特征分布差異性太大,這樣的特征沒法直接使用必須要轉換一下。

XGBoost或GBDT中怎么控制模型復雜度?XGBoost的參數選擇(怎么調參)。。。

自己看參數吧

1.xgboost怎么處理高維稀疏數據?

xgboost原理中的稀疏感知是關于缺失值的,

就是在非缺失的樣本上做分裂然后缺失值根據分別進入左右節點帶來的增益來決定要劃分到哪個節點。如果是常規意義上的高基數類別特征進行onehot之后的0-1矩陣,xgb沒有什么特別的處理方案。

數據標簽值都在0-1000范圍之內,隨機森林和gbdt做回歸的值能否超過1000.

以原始的gbdt的葉子節點輸出為例,假設學習率為1,以mse為損失函數的情況下上面的式子可以變成:

其中n為這個葉子節點的樣本數量。。。。。

這個問題。。。我還真沒想到什么答案。。。。

7、GBDT為什么用CART回歸樹做基學習器?

GBDT算法原理深入解析?xudongyang.coding.me

這一篇說的很清晰。

基于梯度提升算法的學習器叫做GBM(Gradient Boosting Machine)。理論上,GBM可以選擇各種不同的學習算法作為基學習器。現實中,用得最多的基學習器是決策樹。為什么梯度提升方法傾向于選擇決策樹(通常是CART樹)作為基學習器呢?這與決策樹算法自身的優點有很大的關系。決策樹可以認為是if-then規則的集合,易于理解,可解釋性強,預測速度快。同時,決策樹算法相比于其他的算法需要更少的特征工程,比如可以不用做特征標準化,可以很好的處理字段缺失的數據,也可以不用關心特征間是否相互依賴等。決策樹能夠自動組合多個特征,它可以毫無壓力地處理特征間的交互關系并且是非參數化的,因此你不必擔心異常值或者數據是否線性可分(舉個例子,決策樹能輕松處理好類別A在某個特征維度x的末端,類別B在中間,然后類別A又出現在特征維度x前端的情況)。不過,單獨使用決策樹算法時,有容易過擬合缺點。所幸的是,通過各種方法,抑制決策樹的復雜性,降低單顆決策樹的擬合能力,再通過梯度提升的方法集成多個決策樹,最終能夠很好的解決過擬合的問題。由此可見,梯度提升方法和決策樹學習算法可以互相取長補短,是一對完美的搭檔。至于抑制單顆決策樹的復雜度的方法有很多,比如限制樹的最大深度、限制葉子節點的最少樣本數量、限制節點分裂時的最少樣本數量、吸收bagging的思想對訓練樣本采樣(subsample),在學習單顆決策樹時只使用一部分訓練樣本、借鑒隨機森林的思路在學習單顆決策樹時只采樣一部分特征、在目標函數中添加正則項懲罰復雜的樹結構等。

2、GBDT不擅長處理離散特征,你在應用的時候是怎么處理的

GBDT不擅長處理高基數類別特征,如果基數低,問題也不大。原因可見:

馬東什么:為何常規的gbdt和決策樹不適用于高基數特征的場景?zhuanlan.zhihu.com

lightgbm和catboost內部對類別特征有自己的特征工程方案,而xgboost這類無法直接處理類別特征的庫則一般來說:1、單值離散用編碼的方法;2、多值離散用embedding

6、GBDT在回歸和多分類當中有什么不同,在預測的時候的流程是怎樣的

損失函數不同(廢話),預測存在差異。

回歸則直接加權求和輸出全部基學習器的預測結果,分類還要將預測結果加權求和的結果放到sigmoid或者softmax里面轉化為概率值。

1,gbdt如果損失函數換成exponent會怎樣,有什么變化?

變成adaboost。

具體可見:

(boost框架的歷史回顧中,有空補上)

3.GBDT在什么情況下比邏輯回歸算法要差?

高維稀疏的數據集,gbdt對維度超高的稀疏數據集,其正則項約束基本沒用,并且決策空間會變成太多零散的決策小空間,具體可見上gbdt為何不好處理高基數類別特征的問題。

而lr的l1正則項可以很好的約束沒啥用 的稀疏特征,直接w置0即可。

4、GBDT對輸入數據有什么要求,如果效果比較差,可能是什么原因造成的?

如果訓練集的效果很差,說明原始數據相對于gbdt算法來說實在太差了,特征基本沒什么區分度,xgb這種擬合能力超強的算法都無法很好的擬合;

如果訓練集的效果很好測試集很差,并且二者的差距非常大(比如10個點以上),考慮特征分布的問題,應該是有一些強特的分布在訓練集和測試集上差異太大了。

如果訓練集效果很好,測試集稍差一點,二者差異并不是很大,考慮調參。

xgb和lgb的并行實現的比較

1)特征并行

lgbm特征并行的前提是每個worker留有一份完整的數據集,但是每個worker僅在特征子集上進行最佳切分點的尋找;worker之間需要相互通信,通過比對損失來確定最佳切分點;然后將這個最佳切分點的位置進行全局廣播,每個worker進行切分即可。

簡單說就是lgb的每一個worker處理一個特征,按列來拆分到多個worker上進行計算的

xgb的特征并行與lgbm的最大不同在于xgb每個worker節點中僅有部分的列數據,也就是垂直切分,每個worker尋找局部最佳切分點,worker之間相互通信,然后在具有最佳切分點的worker上進行節點分裂,再由這個節點廣播一下被切分到左右節點的樣本索引號,其他worker才能開始分裂。

簡單說就是xgb的每一個worker處理所有特征,但是每個worker只處理一部分取值范圍里的最佳切分點,比如5個worker對一個特征的取值范圍切分為5份,在每一份上計算最佳切分點,然后5份上的5個最佳切分點做比較取最好

一個是豎著切分,一個是橫著切分。

二者的區別就導致了lgbm中worker間通信成本明顯降低,只需通信一個特征分裂點即可,而xgb中要廣播樣本索引。

2)數據并行

當數據量很大,特征相對較少時,可采用數據并行策略。

lgbm中先對數據水平切分,每個worker上的數據先建立起局部的直方圖,然后合并成全局的直方圖,采用直方圖相減的方式,先計算樣本量少的節點的樣本索引,然后直接相減得到另一子節點的樣本索引,這個直方圖算法使得worker間的通信成本降低一倍,因為只用通信以此樣本量少的節點。

xgb中的數據并行也是水平切分,然后單個worker建立局部直方圖,再合并為全局,不同在于根據全局直方圖進行各個worker上的節點分裂時會單獨計算子節點的樣本索引,因此效率賊慢,每個worker間的通信量也就變得很大。

3)投票并行(lgbm)

當數據量和維度都很大時,選用投票并行,該方法是數據并行的一個改進。數據并行中的合并直方圖的代價相對較大,尤其是當特征維度很大時。

大致思想是:每個worker首先會找到本地的一些優秀的特征,然后進行全局投票,根據投票結果,選擇top的特征進行直方圖的合并,再尋求全局的最優分割點。這個方法。。。不懂,上述都是搬運來的。。

xgboost有哪些參數?

-學習率 eta :學習率越小,迭代次數越多。

-最小孩子權重 min-child-weight:控制葉子結點中二階導數和的最小值,即樣本的數量越少(由于h大約均在0.01附近),越容易過擬合

-最大深度 max_depth
-最大葉子結點數 max_leaf_node

-后剪枝參數gamma
-L2參數lambda
-L1參數alpha (控制模型復雜度)

-樣本隨機采樣 subsample;列采樣比例 colsample_bytree
(5)xgboost 有哪些優點?
-樹節點分裂方法,利用近似算法,二階導數為權重值的分位數作為切分點
-自動學習特征缺失值的方向
-列抽樣(借鑒隨機森林),行抽樣
-學習率(eta)的shrinkage,增加迭代次數
-自定義損失函數
-特征預排序
(6)xgboost和gbdt的區別?
1)GBDT是以CART作為基分類器,xgboost支持線性分類器,其中線性分類器的xgboost相當于正則化的邏輯回歸(分類問題)或
線性回歸(回歸問題)
2)GBDT的目標函數含有一階信息,xgboost的目標函數含有二階信息,最小化目標函數可得關于函數空間f(t)的梯度迭代或牛頓迭代,
牛頓法能更快的收斂。同時xgboost加入了正則項,控制了模型的復雜度。
(7) Lightgbm對xgboost有哪些改進?
-Histgram算法 將浮點型數值離散為K個,統計離散值的累積量,遍歷直方圖找最優特征分裂點
-直方圖加速:葉子結點的直方圖可由父親結點的直方圖與兄弟結點的直方圖做差得到
-leave wise 選取信息增益最大的葉子結點繼續分裂(容易過擬合,利用max_depth參數控制)


14. xgboost里面的lambdarank的損失函數是什么?

15. xgboost在什么地方做的剪枝,怎么做的? 分裂,預剪枝;參數,預剪枝。

16. xgboost如何分布式?特征分布式和數據分布式? 各有什么存在的問題?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。