高效調整XGBoost參數你好 @russ_wolfinger ,
我一直在使用XGBoost構建模型,並將它們與其他樹模型和非樹模型(例如NN等)進行比較。我對Nate採取了類似的方法,保留了原始數據集的一部分(位於完全不同的數據表中),然後使用模型比較平台查看這些模型與測試數據集之間的比較情況。
我發現XGBoost在測試數據集上的表現不如預期。我發現引導林目前做得更好。我已經比較了默認值和優化表XGBoost的最佳輸出。可能是因為我沒有很好地調整擬合度,所以我想知道是否存在一種更有效的方法來調整擬合度,因為有很多不同的參數可以修改。
我仔細閱讀了這些示例,並閱讀了PDF幫助中引用的在線文檔,但是在調整模型時沒有太多實用幫助的描述。需要注意的是,我使用的是單一保留驗證,而不是k折交叉驗證。最好先構建一個可能會稍微過擬合的非常複雜的模型,然後再將其與其他參數一起修剪以使其更加保守?
DS
回复:有效調整XGBoost參數你好 @russ_wolfinger ,
感謝您提供更新的信息。在將XGBoost調整到我可能接近的其他平台之後,我確實盡我所能測試了優化的增強樹和自舉森林對XGBoost的輸出,並且輸出之間具有很好的相關性。不精確,但非常接近!
按照我之前發布的鏈接中的步驟進行操作,確實有助於更好地調整模型。
在其他一些反饋方面:
1。我最近了解了“比較”下的“刪除顯示的模型”的作用,正如所說的那樣,但是我不清楚如果未選中某個框,它將保留它。這是通過驗證R ^ 2對數據表進行排序後消除可能的擬合的一種有用方法。
2。我已經註意到,在運行優化設計時,重要的是要確保第一列具有與“最小值/最大值”列相同的固定值,或者在第一列與第二列之間(如果有所不同)以使其正常工作。有幾次我正在調整另一個值,例如min_child_weight,並為迭代輸入了固定值(例如Min / Max 150),但是第一列的值保留為100。在這種情況下,它將迭代次數保持為100,而不是150。我認為,如果將最小值/最大值設置為相同的值,則第一列應拉出該值,並像使用非固定參數的調整表一樣重新填充它。在下面的示例中,我正在調整max_depth和min_child_weight,但是有幾個實例,即使將min / max設置為387,我也將迭代次數保留為100。我必須手動返回並更改為387才能正確計算。

謝謝!,
DS
回复:有效調整XGBoost參數你好 @DS ,
感謝您繼續追求這一目標。 我最近才發現並解決了公式元數據中的兩個問題,這些問題目前可能會在模型比較平台中對XGBoost結果產生不利影響。 這些和其他一些更新將在幾個月後的JMP Pro 16 Early Adopter中提供。 同時,您可以直接在JMP表中嘗試與Boosted Tree平台進行一些基本比較。
以下參數直接在Boosted Tree和XGBoost之間映射:
- 層數<->迭代
- 每棵樹的分割<-> max_depth
- 學習率<-> learning_rate
- 最小大小分割<-> min_child_weight
- 行採樣率<->二次採樣
- 列採樣率<-> colsample_bytree
將XGBoost高級參數grow_policy更改為“ lossguide”可能會有所幫助。 如您所指示,嘗試擬合併保存來自兩個相似模型的預測,然後將預測相互繪製。 它們應該高度相關。
您猜到了“高級選項”下的“調整設計表”。 您需要設置一個單獨的JMP表,其列名與XGBoost參數名稱完全匹配,然後在參數框中手動鍵入該JMP表的名稱。 您可以從頭開始手動創建表,也可以右鍵單擊“模型比較表”>“另存為數據表”開始使用。 這樣就可以跨所有參數指定任意設計,但是此時僅經過了輕度的測試,因此請確保仔細檢查結果。
回复:有效調整XGBoost參數你好 @russ_wolfinger ,
感謝您的信息。我發現這篇文章非常有幫助,至少在通過直接示例和迭代逐步方法來優化XGBoost方面很有幫助。
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
我的特殊情況大約有3500個訓練行和1000個測試行。如前所述,我的測試行位於一個單獨的數據表中,我將該數據表連接到第一個數據表,然後比較模型-這是為了找出哪個模型實際上對未使用的數據集預測最佳。另外,我將3500個訓練行劃分為80/20訓練/驗證行,並按我正在建模的Y輸出進行分層。
我將通過一些不同的調整方案來研究最有效的方法。但是,我想做的一件事是驗證XGBoost是否可以給我“相同”的輸出,例如引導森林。是否可以從引導林或增強樹中獲取參數並將其轉換為XGBoost中的適當設置?原則上,XGBoost應該給出幾乎相同的結果,但是要快得多。我已經嘗試閱讀一些有關如何執行此操作的文章,但我仍在努力將其他平台的設置轉換為XGBoost。
比較模型平台對XGBoost模型的評估是否可能不同?
一些更明確的問題:
是否可以通過XGBoost平台確定樹的數量?這是“迭代”字段嗎?
我們可以為平台提供自己的調整設計表嗎?在“高級選項”下,有一個具有該名稱的字段,但為空。如果我們有自己的調整表,是否可以在其中輸入其名稱?
謝謝,
DS
回复:有效調整XGBoost參數你好 @DS ,非常感謝您的反饋。 有一些不錯的手動方法可以進行調整。 我只是嘗試使用谷歌搜索“ tuning xgboost”,前幾個鏈接看起來很合理。 這些可能被認為是一門藝術,而不是科學,但是它們有助於闡明每個參數的作用,並就XGBoost的工作原理建立一個整體的直覺。
如果您有機會分享或發佈設置,我很想知道您的設置。 在許多比較中,以及在像Kaggle這樣的競爭環境中,我發現XGBoost的性能更好。 隨著數據集大小的增加,性能提升趨於變得更強。
聽起來您正在進行經典的訓練驗證測試拆分。 可能有必要使用不同的拆分多次運行此過程,以確定性能估計的穩定性。
k折的一個優點是,您會獲得針對k個模型擬合的“袋裝”預測變量,並且它幾乎總是比在一部分數據上訓練的單個模型更好。 另一種方法是使用您喜歡的任何驗證方法進行調整,然後在最後使用整個訓練+驗證數據進行一次最終擬合。