lgb.LGBMRegressor参数解释以及调参方法

警告:调参很耗时间!而且提升效果甚微!

import lightgbm as lgb
model_lgb = lgb.LGBMRegressor(objective='regression',
                              max_depth = 3,
                              learning_rate=0.1, n_estimators=3938,
                              metric='rmse', bagging_fraction = 0.8,feature_fraction = 0.8)

lgb有两种使用方式,方式1:使用lgb的风格

params_lgb_ = {
    'boosting_type': 'gbdt', 
    'objective': 'regression', 
 
    'learning_rate': 0.1, 
    'num_leaves': 50, 
    'max_depth': 6,
 
    'subsample': 0.8, 
    'colsample_bytree': 0.8, 
    }
model_lgb = lgb.cv(
    params_lgb_, train_data, num_boost_round=50000, nfold=5, stratified=False, shuffle=True, metrics='mse',
    early_stopping_rounds=50, verbose_eval=50, show_stdv=True, seed=0)

方式2:使用sklearn风格

params_test1 = {'num_leaves':[5,6,7,8]}
model_lgb = lgb.LGBMRegressor(objective='regression',
                              max_depth = 3,
                              learning_rate=0.1, n_estimators=3938,
                              metric='rmse', bagging_fraction = 0.8,feature_fraction = 0.8)
gsearch1 = GridSearchCV(estimator=model_lgb, param_grid=params_test1, scoring='neg_mean_squared_error', cv=5, verbose=1, n_jobs=4)

两种方法总结:lgb风格直接使用lgb就行,分类和回归使用相同的API。
sklearn风格需要使用lgb.LGMRegressor或者lgb.Classifier进行回归和分类。同时参数的命名风格与sklearn通用,可以使用sklearn的网格搜索进行调参。
两种风格能力相同,这里我是偏向于使用sklearn风格的。

以LGMRegressor为例,详细分析一下各个参数的意义和作用,以及调参的顺序。
LGM官方文档

LGMRegressor,参数

boosting_type :‘gbdt’,‘rf’
n_jobs 几核cpu
silent 默认选择True,选择False会输出很多建模中的细节,作用不大还刷屏。
----------------------------上面三个参数是要在开始前就确定的-------------------------
learning_rate:学习率,初始状态建议选择较大的学习率,设置为0.1.
n_estimators :树的数量,初始状态适配lr = 0.1
这两个参数是一对情侣,调整一个另外一个也需要调整,相互影响巨大!
这两个参数作用于树的数量,不关心树的内部。
++++++++++++++++这两个参数需要联调++++++++++++++++++++++++++
max_depth:每棵树的最大深度,防止过拟合。初始状态设置3~8。
num_leaves :每棵树的最多叶子数,因为CART是二叉树,所以叶子数量最大值为2 **depth,所以num_leaves要小于该值才有意义。
min_child_samples:又称为min_data_in_leaf,指要想建立一个叶子所需要的的最少样本数,增大它可以降低过拟合。
min_child_weight:又称为min_sum_hessian_in_leaf,指要想建立一个叶子,该叶子需要提供的最小hessian值。这两个参数都是对新建叶子设置了门槛,可以降低叶子数量,减小过拟合。
feature_fraction:每次新建一棵树时,随机使用多少的特征。
bagging_fraction:每次进行bagging时,随机使用多少的样本。
bagging_freq:每建立多少棵树,就进行一次bagging。
reg_alpha :L1正则化参数
reg_lambda :L2正则化参数
+++++++++++++上面的参数是调整每棵树的属性++++++++++++++++++++

基本调参思路,首先设置lr=0.1确定树的数量,然后调整每颗树的内部参数到最佳。确定树的内部参数后,用该参数,降低lr,反调lr和树的数量。
参考:调参笔记1
调参笔记2

猜你喜欢

转载自blog.csdn.net/weixin_44414593/article/details/107709127
lgb