【機器學習】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、 樹相關引數
- min_samples_split
最小劃分樣本數目,控制過擬合,但值太高容易欠擬合,交叉驗證調整 - min_samples_leaf
節點最小樣本數目,不平衡分類問題需要設定較低的值,防止最小類別落入最大類別區域內 - min_weight_fraction_leaf
同2相同,只不過換成樣本值的百分比,2或3只設置一個就行 - max_depth
樹的最大深度,控制過擬合,通過交叉驗證調參 - max_leaf_nodes
最大葉子數目,二叉樹與4中樹的深度相關(2的n次方),如果這個值設定了,GBDT會忽略4 - max_features
劃分節點考慮的最大特徵數目,優先選總數目的平方根,但也要檢查是否達到總數目30%-40%的範圍內
太高容易導致過擬合
3、boosting相關引數
- learning_rate
學習率控制樹估計值變化的幅度,較小的值泛化的更好(老師推薦最好小於0.1), 但需要計算更多的樹,計算代價較大 - n_estimators
樹的數目,交叉驗證調參 - 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。