Task 11 XGBoost 算法分析與案例調(diào)參實(shí)例

1. XGBoost算法

XGBoost是陳天奇等人開發(fā)的一個(gè)開源機(jī)器學(xué)習(xí)項(xiàng)目,高效地實(shí)現(xiàn)了GBDT算法并進(jìn)行了算法和工程上的許多改進(jìn),被廣泛應(yīng)用在Kaggle競賽及其他許多機(jī)器學(xué)習(xí)競賽中并取得了不錯的成績。XGBoost是一個(gè)優(yōu)化的分布式梯度增強(qiáng)庫,旨在實(shí)現(xiàn)高效,靈活和便攜。 它在Gradient Boosting框架下實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法。 XGBoost提供了并行樹提升(也稱為GBDT,GBM),可以快速準(zhǔn)確地解決許多數(shù)據(jù)科學(xué)問題。 Xgboost以CART決策樹為子模型,通過Gradient Tree Boosting實(shí)現(xiàn)多棵CART樹的集成學(xué)習(xí),得到最終模型。
模型構(gòu)建如下:
(1) 構(gòu)造目標(biāo)函數(shù):
假設(shè)有K棵樹,則第i個(gè)樣本的輸出為\hat{y}_{i}=\phi\left(\mathrm{x}_{i}\right)=\sum_{k=1}^{K} f_{k}\left(\mathrm{x}_{i}\right), \quad f_{k} \in \mathcal{F}
(2) 疊加式的訓(xùn)練(Additive Training):
給定樣本x_i,\hat{y}_i^{(0)} = 0(初始預(yù)測),\hat{y}_i^{(1)} = \hat{y}_i^{(0)} + f_1(x_i),\hat{y}_i^{(2)} = \hat{y}_i^{(0)} + f_1(x_i) + f_2(x_i) = \hat{y}_i^{(1)} + f_2(x_i).......以此類推,可以得到:\hat{y}_i^{(K)} = \hat{y}_i^{(K-1)} + f_K(x_i) ,其中,\hat{y}_i^{(K-1)} 為前K-1棵樹的預(yù)測結(jié)果,f_K(x_i) 為第K棵樹的預(yù)測結(jié)果。
因此,目標(biāo)函數(shù)可以分解為:
\mathcal{L}^{(K)}=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(K-1)}+f_{K}\left(\mathrm{x}_{i}\right)\right)+\sum_{k} \Omega\left(f_{k}\right)
由于正則化項(xiàng)也可以分解為前K-1棵樹的復(fù)雜度加第K棵樹的復(fù)雜度,因此:\mathcal{L}^{(K)}=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(K-1)}+f_{K}\left(\mathrm{x}_{i}\right)\right)+\sum_{k=1} ^{K-1}\Omega\left(f_{k}\right)+\Omega\left(f_{K}\right),由于\sum_{k=1} ^{K-1}\Omega\left(f_{k}\right)在模型構(gòu)建到第K棵樹的時(shí)候已經(jīng)固定,無法改變.
(3) 如何定義一棵樹:
為了說明如何定義一棵樹的問題,我們需要定義幾個(gè)概念:第一個(gè)概念是樣本所在的節(jié)點(diǎn)位置q(x),第二個(gè)概念是有哪些樣本落在節(jié)點(diǎn)j上,第三個(gè)概念是每個(gè)結(jié)點(diǎn)的預(yù)測值w_{q(x)},第四個(gè)概念是模型復(fù)雜度\Omega\left(f_{K}\right),它可以由葉子節(jié)點(diǎn)的個(gè)數(shù)以及節(jié)點(diǎn)函數(shù)值來構(gòu)建,則:\Omega\left(f_{K}\right) = \gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}

2. XGBoost的

XGBoost的參數(shù)分為三種:

  • 通用參數(shù):(兩種類型的booster,因?yàn)閠ree的性能比線性回歸好得多,因此我們很少用線性回歸。)
    • booster:使用哪個(gè)弱學(xué)習(xí)器訓(xùn)練,默認(rèn)gbtree,可選gbtree,gblinear 或dart
    • nthread:用于運(yùn)行XGBoost的并行線程數(shù),默認(rèn)為最大可用線程數(shù)
    • verbosity:打印消息的詳細(xì)程度。有效值為0(靜默),1(警告),2(信息),3(調(diào)試)。
    • Tree Booster的參數(shù):
      • eta(learning_rate):learning_rate,在更新中使用步長收縮以防止過度擬合,默認(rèn)= 0.3,范圍:[0,1];典型值一般設(shè)置為:0.01-0.2
      • gamma(min_split_loss):默認(rèn)= 0,分裂節(jié)點(diǎn)時(shí),損失函數(shù)減小值只有大于等于gamma節(jié)點(diǎn)才分裂,gamma值越大,算法越保守,越不容易過擬合,但性能就不一定能保證,需要平衡。范圍:[0,∞]
      • max_depth:默認(rèn)= 6,一棵樹的最大深度。增加此值將使模型更復(fù)雜,并且更可能過度擬合。范圍:[0,∞]
      • min_child_weight:默認(rèn)值= 1,如果新分裂的節(jié)點(diǎn)的樣本權(quán)重和小于min_child_weight則停止分裂 。這個(gè)可以用來減少過擬合,但是也不能太高,會導(dǎo)致欠擬合。范圍:[0,∞]
      • max_delta_step:默認(rèn)= 0,允許每個(gè)葉子輸出的最大增量步長。如果將該值設(shè)置為0,則表示沒有約束。如果將其設(shè)置為正值,則可以幫助使更新步驟更加保守。通常不需要此參數(shù),但是當(dāng)類極度不平衡時(shí),它可能有助于邏輯回歸。將其設(shè)置為1-10的值可能有助于控制更新。范圍:[0,∞]
      • subsample:默認(rèn)值= 1,構(gòu)建每棵樹對樣本的采樣率,如果設(shè)置成0.5,XGBoost會隨機(jī)選擇一半的樣本作為訓(xùn)練集。范圍:(0,1]
      • sampling_method:默認(rèn)= uniform,用于對訓(xùn)練實(shí)例進(jìn)行采樣的方法。
        • uniform:每個(gè)訓(xùn)練實(shí)例的選擇概率均等。通常將subsample> = 0.5 設(shè)置 為良好的效果。
        • gradient_based:每個(gè)訓(xùn)練實(shí)例的選擇概率與規(guī)則化的梯度絕對值成正比,具體來說就是\sqrt{g^2+\lambda h^2},subsample可以設(shè)置為低至0.1,而不會損失模型精度。
      • colsample_bytree:默認(rèn)= 1,列采樣率,也就是特征采樣率。范圍為(0,1]
      • lambda(reg_lambda):默認(rèn)=1,L2正則化權(quán)重項(xiàng)。增加此值將使模型更加保守。
      • alpha(reg_alpha):默認(rèn)= 0,權(quán)重的L1正則化項(xiàng)。增加此值將使模型更加保守。
      • tree_method:默認(rèn)=auto,XGBoost中使用的樹構(gòu)建算法。
        • auto:使用啟發(fā)式選擇最快的方法。
          • 對于小型數(shù)據(jù)集,exact將使用精確貪婪。
          • 對于較大的數(shù)據(jù)集,approx將選擇近似算法。它建議嘗試hist,gpu_hist,用大量的數(shù)據(jù)可能更高的性能。(gpu_hist)支持。external memory外部存儲器。
        • exact:精確的貪婪算法。枚舉所有拆分的候選點(diǎn)。
        • approx:使用分位數(shù)和梯度直方圖的近似貪婪算法。
        • hist:更快的直方圖優(yōu)化的近似貪婪算法。(LightGBM也是使用直方圖算法)
        • gpu_hist:GPU hist算法的實(shí)現(xiàn)。
      • scale_pos_weight:控制正負(fù)權(quán)重的平衡,這對于不平衡的類別很有用。Kaggle競賽一般設(shè)置sum(negative instances) / sum(positive instances),在類別高度不平衡的情況下,將參數(shù)設(shè)置大于0,可以加快收斂。
      • num_parallel_tree:默認(rèn)=1,每次迭代期間構(gòu)造的并行樹的數(shù)量。此選項(xiàng)用于支持增強(qiáng)型隨機(jī)森林。
      • monotone_constraints:可變單調(diào)性的約束,在某些情況下,如果有非常強(qiáng)烈的先驗(yàn)信念認(rèn)為真實(shí)的關(guān)系具有一定的質(zhì)量,則可以使用約束條件來提高模型的預(yù)測性能。(例如params_constrained['monotone_constraints'] = "(1,-1)",(1,-1)我們告訴XGBoost對第一個(gè)預(yù)測變量施加增加的約束,對第二個(gè)預(yù)測變量施加減小的約束。)
    • Linear Booster的參數(shù):
      • lambda(reg_lambda):默認(rèn)= 0,L2正則化權(quán)重項(xiàng)。增加此值將使模型更加保守。歸一化為訓(xùn)練示例數(shù)。
      • alpha(reg_alpha):默認(rèn)= 0,權(quán)重的L1正則化項(xiàng)。增加此值將使模型更加保守。歸一化為訓(xùn)練示例數(shù)。
      • updater:默認(rèn)= shotgun。
        • shotgun:基于shotgun算法的平行坐標(biāo)下降算法。使用“ hogwild”并行性,因此每次運(yùn)行都產(chǎn)生不確定的解決方案。
        • coord_descent:普通坐標(biāo)下降算法。同樣是多線程的,但仍會產(chǎn)生確定性的解決方案。
      • feature_selector:默認(rèn)= cyclic。特征選擇和排序方法
        • cyclic:通過每次循環(huán)一個(gè)特征來實(shí)現(xiàn)的。
        • shuffle:類似于cyclic,但是在每次更新之前都有隨機(jī)的特征變換。
        • random:一個(gè)隨機(jī)(有放回)特征選擇器。
        • greedy:選擇梯度最大的特征。(貪婪選擇)
        • thrifty:近似貪婪特征選擇(近似于greedy)
      • top_k:要選擇的最重要特征數(shù)(在greedy和thrifty內(nèi))
  • 任務(wù)參數(shù)(這個(gè)參數(shù)用來控制理想的優(yōu)化目標(biāo)和每一步結(jié)果的度量方法。)
    • objective:默認(rèn)=reg:squarederror,表示最小平方誤差。
      • reg:squarederror,最小平方誤差。
      • reg:squaredlogerror,對數(shù)平方損失。\frac{1}{2}[log(pred+1)-log(label+1)]^2
      • reg:logistic,邏輯回歸
      • reg:pseudohubererror,使用偽Huber損失進(jìn)行回歸,這是絕對損失的兩倍可微選擇。
      • binary:logistic,二元分類的邏輯回歸,輸出概率。
      • binary:logitraw:用于二進(jìn)制分類的邏輯回歸,邏輯轉(zhuǎn)換之前的輸出得分。
      • binary:hinge:二進(jìn)制分類的鉸鏈損失。這使預(yù)測為0或1,而不是產(chǎn)生概率。(SVM就是鉸鏈損失函數(shù))
      • count:poisson –計(jì)數(shù)數(shù)據(jù)的泊松回歸,泊松分布的輸出平均值。
      • survival:cox:針對正確的生存時(shí)間數(shù)據(jù)進(jìn)行Cox回歸(負(fù)值被視為正確的生存時(shí)間)。
      • survival:aft:用于檢查生存時(shí)間數(shù)據(jù)的加速故障時(shí)間模型。
      • aft_loss_distribution:survival:aft和aft-nloglik度量標(biāo)準(zhǔn)使用的概率密度函數(shù)。
      • multi:softmax:設(shè)置XGBoost以使用softmax目標(biāo)進(jìn)行多類分類,還需要設(shè)置num_class(類數(shù))
      • multi:softprob:與softmax相同,但輸出向量,可以進(jìn)一步重整為矩陣。結(jié)果包含屬于每個(gè)類別的每個(gè)數(shù)據(jù)點(diǎn)的預(yù)測概率。
      • rank:pairwise:使用LambdaMART進(jìn)行成對排名,從而使成對損失最小化。
      • rank:ndcg:使用LambdaMART進(jìn)行列表式排名,使標(biāo)準(zhǔn)化折讓累積收益(NDCG)最大化。
      • rank:map:使用LambdaMART進(jìn)行列表平均排名,使平均平均精度(MAP)最大化。
      • reg:gamma:使用對數(shù)鏈接進(jìn)行伽馬回歸。輸出是伽馬分布的平均值。
      • reg:tweedie:使用對數(shù)鏈接進(jìn)行Tweedie回歸。
      • 自定義損失函數(shù)和評價(jià)指標(biāo):https://xgboost.readthedocs.io/en/latest/tutorials/custom_metric_obj.html
    • eval_metric:驗(yàn)證數(shù)據(jù)的評估指標(biāo),將根據(jù)目標(biāo)分配默認(rèn)指標(biāo)(回歸均方根,分類誤差,排名的平均平均精度),用戶可以添加多個(gè)評估指標(biāo)
      • rmse,均方根誤差; rmsle:均方根對數(shù)誤差; mae:平均絕對誤差;mphe:平均偽Huber錯誤;logloss:負(fù)對數(shù)似然; error:二進(jìn)制分類錯誤率;
      • merror:多類分類錯誤率; mlogloss:多類logloss; auc:曲線下面積; aucpr:PR曲線下的面積;ndcg:歸一化累計(jì)折扣;map:平均精度;
    • seed :隨機(jī)數(shù)種子,[默認(rèn)= 0]。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容