博客專欄

        EEPW首頁 > 博客 > XGBoost超參數調優指南(1)

        XGBoost超參數調優指南(1)

        發布人:數據派THU 時間:2023-06-23 來源:工程師 發布文章

        對于XGBoost來說,默認的超參數是可以正常運行的,但是如果你想獲得最佳的效果,那么就需要自行調整一些超參數來匹配你的數據,以下參數對于XGBoost非常重要:

        • eta

        • num_boost_round

        • max_depth

        • subsample

        • colsample_bytree

        • gamma

        • min_child_weight

        • lambda

        • alpha

        XGBoost的API有2種調用方法,一種是我們常見的原生API,一種是兼容Scikit-learn API的API,Scikit-learn API與Sklearn生態系統無縫集成。我們這里只關注原生API(也就是我們最常見的),但是這里提供一個列表,這樣可以幫助你對比2個API參數,萬一以后用到了呢:


        圖片


        如果想使用Optuna以外的超參數調優工具,可以參考該表。下圖是這些參數對之間的相互作用:


        圖片


        這些關系不是固定的,但是大概情況是上圖的樣子,因為有一些其他參數可能會對我們的者10個參數有額外的影響。


        1、objective


        這是我們模型的訓練目標


        圖片


        最簡單的解釋是,這個參數指定我們模型要做的工作,也就是影響決策樹的種類和損失函數。


        2、num_boost_round - n_estimators


        num_boost_round指定訓練期間確定要生成的決策樹(在XGBoost中通常稱為基礎學習器)的數量。默認值是100,但對于今天的大型數據集來說,這還遠遠不夠。


        增加參數可以生成更多的樹,但隨著模型變得更復雜,過度擬合的機會也會顯著增加。


        從Kaggle中學到的一個技巧是為num_boost_round設置一個高數值,比如100,000,并利用早停獲得最佳版本。


        在每個提升回合中,XGBoost會生成更多的決策樹來提高前一個決策樹的總體得分。這就是為什么它被稱為boost。這個過程一直持續到num_boost_round輪詢為止,不管是否比上一輪有所改進。


        但是通過使用早停技術,我們可以在驗證指標沒有提高時停止訓練,不僅節省時間,還能防止過擬合。


        有了這個技巧,我們甚至不需要調優num_boost_round。下面是它在代碼中的樣子:


         # Define the rest of the params params = {...}
        # Build the train/validation sets dtrain_final = xgb.DMatrix(X_train, label=y_train) dvalid_final = xgb.DMatrix(X_valid, label=y_valid)
        bst_final = xgb.train(    params,    dtrain_final,    num_boost_round=100000 # Set a high number    evals=[(dvalid_final, "validation")],    early_stopping_rounds=50, # Enable early stopping    verbose_eval=False, )


        上面的代碼使XGBoost生成100k決策樹,但是由于使用了早停,當驗證分數在最后50輪中沒有提高時,它將停止。一般情況下樹的數量范圍在5000-10000即可。控制num_boost_round也是影響訓練過程運行時間的最大因素之一,因為更多的樹需要更多的資源。


        3、eta - learning_rate


        在每一輪中,所有現有的樹都會對給定的輸入返回一個預測。例如,五棵樹可能會返回以下對樣本N的預測:



         Tree 1: 0.57   Tree 2: 0.9   Tree 3: 4.25   Tree 4: 6.4   Tree 5: 2.1


        為了返回最終的預測,需要對這些輸出進行匯總,但在此之前XGBoost使用一個稱為eta或學習率的參數縮小或縮放它們。縮放后最終輸出為:



         output = eta * (0.57 + 0.9 + 4.25 + 6.4 + 2.1)


        大的學習率給集合中每棵樹的貢獻賦予了更大的權重,但這可能會導致過擬合/不穩定,會加快訓練時間。而較低的學習率抑制了每棵樹的貢獻,使學習過程更慢但更健壯。這種學習率參數的正則化效應對復雜和有噪聲的數據集特別有用。


        學習率與num_boost_round、max_depth、subsample和colsample_bytree等其他參數呈反比關系。較低的學習率需要較高的這些參數值,反之亦然。但是一般情況下不必擔心這些參數之間的相互作用,因為我們將使用自動調優找到最佳組合。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 青海省| 读书| 静宁县| 页游| 昌江| 潍坊市| 新竹市| 黑河市| 呼图壁县| 天台县| 揭阳市| 思茅市| 新营市| 石嘴山市| 克拉玛依市| 文登市| 象州县| 江孜县| 永仁县| 自贡市| 蕉岭县| 黑水县| 博爱县| 永泰县| 涞水县| 长寿区| 龙游县| 马鞍山市| 共和县| 邹平县| 庄浪县| 桦甸市| 外汇| 新田县| 库尔勒市| 兰考县| 东兰县| 芜湖县| 孝昌县| 崇左市| 天柱县|