天天看點

LightGBM-調參

LightGBM 分類樹- 調參

    • 參數1 n_estimators
    • 參數2 learning_rate
    • 參數3 max_depth
    • 參數4 num_leaves
    • 參數5 feature_fraction
    • 參數6 bagging_fraction+bagging_freq
    • 參數7 feature_fraction

對lightgbm幾個比較重要的參數進行調優,以下是模型主要用到的幾個包

# 導入資料分割, 模型驗證,cv參數搜尋,以及lightgbm包
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,roc_auc_score, roc_curve, f1_score
from sklearn.model_selection import GridSearchCV
import lightgbm as gbm
           

參數可以分開進行,因為每次耗時也較多,可以按照參數的重要程度,每次搜尋一個或者2個參數。整體參考如下:

param = {
    'n_estimators': range(200,1000,50),
    'learning_rate': [0.1, 0.05, 0.01, 0.001]       
    'max_depth': range(5,40,5)    
    'num_leaves': [20,30,40],
    'feature_fraction': [0.6, 0.8, 1], 
    'bagging_fraction': [0.8,0.9,1], 
    'bagging_freq':    [2,3,4]}

gc = GridSearchCV( lgb.LGBMClassifier(), param_grid=param,
                   scoring = 'roc_auc',  cv=5)
''' 資料分割'''
x_train, x_test, y_train,  y_test = train_test_split(x,  y, test_size=0.3, random_state=4, shuffle=True)
''' 模型訓練'''
gc.fit(x_train, y_train )
''' 列印出效果最好的參數及其值 '''
print(gc.best_params_ , gc.best_score_)

           

參數1 n_estimators

訓練循環的次數,預設是100次,根據需要手動調整。 可以先設定一個大的區域範圍找到較優次數,在附近,再設定門檻值範圍。

param = {
      'n_estimators': range(200,1000,50),
    }
           

參數2 learning_rate

學習率,預設是0.1。也被稱為shrinkage_rate, 梯度下降的步長。根據資料需要進行探索變化,不是越小越好。

param = {
      'learning_rate': [0.1, 0.05, 0.01]
    }
           

參數3 max_depth

樹的最大深度,預設是沒有限制,但是深度值并非越大越好。容易産生過拟合。是以建議進行參數設定。查找較優的深度。

param = {
     'max_depth': range(5,20,2)    
    }
           

參數4 num_leaves

預設值是31,根據資料情況而定,也被稱為num_leaf。一棵樹上的葉子數目。(即沒有子節點的節點樹),一般設定小于2^(max_depth)

param = {
     'num_leaves': [20,30,40],
    }
           

參數5 feature_fraction

随機選擇一定比列的特征去模型中。資料中樣本或者特征值資料過多時,可考慮進行設定。

param = {
      'feature_fraction': [0.6, 0.8, 1],
    }
           

參數6 bagging_fraction+bagging_freq

bagging_fraction+bagging_freq參數必須同時設定,這裡參考來自知乎的說明

LightGBM+gridsearchcv調參

param = {
     'bagging_fraction': [0.8,0.9,1],
     'bagging_freq':    [2,3,4],
    }
           

bagging_fraction和bagging_freq參數必須同時設定,

bagging_fraction相當于subsample樣本采樣,可以使bagging更快的運作,同時也可以降拟合。

bagging_freq預設0,表示bagging的頻率,0意味着沒有使用bagging,k意味着每k輪疊代進行一次bagging。

參數7 feature_fraction

随機選擇一定比列的特征去模型中。資料中樣本或者特征值資料過多時,可考慮進行設定。

param = {
      'feature_fraction': [0.6, 0.8, 1],
    }
           

其他更多的參數調整見官網

LightGBM params