簡體   English   中英

如何在xgboost中訪問單個決策樹的權重?

[英]How to access weighting of indiviual decision trees in xgboost?

我正在使用xgboost進行排名

param = {'objective':'rank:pairwise', 'booster':'gbtree'}

據我所知,通過計算學習決策樹的加權和來實現梯度增強。 如何訪問分配給每個學習助推器的權重? 我想在訓練后嘗試對加權進行后處理,以加快預測步驟,但我不知道如何獲得單獨的權重。 使用dump_model() ,可以在創建的文件中看到不同的決策樹,但不存儲加權。 在API中我沒有找到合適的功能。 或者我可以用收縮參數eta手動計算重量?

正如你所說,每棵樹都有相同的權重eta ,整體預測是每棵樹預測的總和。

您可能期望較早的樹比后面的樹更重,但由於每棵樹之后響應的更新方式,這是不必要的。 這是一個玩具示例:

假設我們有5個觀察結果,響應分別為10,20,30,40,50。構建第一棵樹並給出12,18,27,39,54的預測。

現在,如果eta = 1,傳遞給下一個樹的響應變量將是-2,2,3,1,-4(即預測和真實響應之間的差異)。 然后,下一棵樹將嘗試學習第一棵樹未捕獲的“噪音”。 如果nrounds = 2,那么來自兩棵樹的預測之和將給出模型的最終預測。

如果相反eta = 0.1,所有樹的預測都將按eta縮小,因此第一棵樹將“預測”1.2,1.8,2.7,3.9,5.4。 傳遞給下一個樹的響應變量將具有值8.8,18.2,27.3,36.1,44.6(縮放預測和真實響應之間的差異)然后第二輪使用這些響應值來構建另一個樹 - 再次預測由eta縮放。 所以樹2預測說,7,18,25,40,40,一旦縮放,就變成0.7,1.8,2.5,4.0,4.0。 和以前一樣,第三棵樹將傳遞這些值與前一棵樹的響應變量之間的差異(所以8.1,16.4,24.8,32.1.40.6)。 同樣,來自所有樹的預測總和將給出最終預測。

很明顯,當eta = 0.1,並且base_score為0時,你需要至少10輪來獲得任何接近合理的預測。 通常,您需要絕對最小1 / eta輪次,通常更多。

使用小eta的基本原理是模型可以從預測中采取小步驟而不是使樹1完成大部分工作。 它有點像結晶 - 慢慢冷卻,你會變得更大,更好的水晶。 缺點是你需要增加nrounds ,從而增加算法的運行時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM