1. 程式人生 > >【機器學習】GBDT梯度提升演算法調參法總結II

【機器學習】GBDT梯度提升演算法調參法總結II

對於GBDT的引數調整,上一篇已經通過例項講明,不過調整引數確實重要,繼續總結一下通用套路。

1、相關引數

GBDT演算法引數主要分為三個類別: 
1.Tree-Specific Parameters: These affect each individual tree in the model. 
樹相關引數,決定每棵樹的結構 
2.Boosting Parameters: These affect the boosting operation in the model. 
提升相關引數,影響提升操作
3.Miscellaneous Parameters: Other parameters for overall functioning. 
其他引數*

2、 樹相關引數

  1. min_samples_split 
    最小劃分樣本數目,控制過擬合,但值太高容易欠擬合,交叉驗證調整
  2. min_samples_leaf 
    節點最小樣本數目,不平衡分類問題需要設定較低的值,防止最小類別落入最大類別區域內
  3. min_weight_fraction_leaf 
    同2相同,只不過換成樣本值的百分比,2或3只設置一個就行
  4. max_depth 
    樹的最大深度,控制過擬合,通過交叉驗證調參
  5. max_leaf_nodes 
    最大葉子數目,二叉樹與4中樹的深度相關(2的n次方),如果這個值設定了,GBDT會忽略4
  6. max_features 
    劃分節點考慮的最大特徵數目,優先選總數目的平方根,但也要檢查是否達到總數目30%-40%的範圍內 
    太高容易導致過擬合

3、boosting相關引數

  1. learning_rate 
    學習率控制樹估計值變化的幅度,較小的值泛化的更好(老師推薦最好小於0.1), 但需要計算更多的樹,計算代價較大
  2. n_estimators 
    樹的數目,交叉驗證調參
  3. subsample 
    每棵樹考慮樣本的數目,值稍微小於1就可以降低方差,模型會更穩健,一般來說0.8就可以,不過也可以調整的更好

4、其他引數損失函式、random-status等,詳見sklearn庫

5、引數調整的通用方法

學習率和樹的數目是需要權衡的引數,一般來說學習率較低時還都不錯,我們只需要訓練足夠多的樹。但是對於特定學習率,樹的數目很高時,可能導致過擬合,如果調低學習率增加樹,又會引起計算時間的增長。 


因此可採用如下調整方式: 
1.選擇相對較高的學習率, 一般預設0.1即可,不過有時根據問題不同可能選擇0.05-0.2 
2.選擇對應該學習率的最優的樹數目,要考慮執行效率,因為後面還要測試其他引數 
3.調整生成樹對應引數 
4.調低學習率,增加樹的數目,來得到更穩健的模型。

初始值設定 
調參之前,通常可以採用如下初始值: 
min_samples_split=3, 通常選擇樣本總數目的0.5%-1% 
min_samples_leaf=5 ;max_depth=5, 通常選擇選擇3-8 ;max_features=’sqrt’ 
subsample=0.8,通常選擇該初始值

選擇設定的初始學習率時最優樹數目 

採用以上初始值,從20-200範圍內用函式GridSearchCV搜尋最優樹數目,如果得到的樹數目過少,可以適當降低學習率,再gridsearch下如果很高的話,就要考慮調高學習率,否則計算時間較長。在實踐中應權衡這兩個引數值 。

調整樹引數 

接下來,調整樹引數,可以採用如下順序: 
調整max_depth 和 num_samples_split ;max_depth 取3-12,steps=2 ;min_samples_split取2-10,steps=2 
調整min_samples_leaf ;min_samples_leaf取2-10
調整max_features ;max_features取3-13,step=1 
調參順序是我們在實踐中要認真考慮的,應首先調對結果影響最大的引數,比如max_depth and num_samples_split。

調整boosting引數

先調整學習率、樹的數目。 隨著學習率降低,樹數目增加,測試集MSE,R2還是在提高的,但計算時間是個問題。,剩下的就是subsample。