一 LightGBM核心参数
参数 | 中文含义 | 作用 |
---|---|---|
learning_rate | 学习率,默认值0.1 | 控制模型迭代速度,越大模型迭代越快,但容易错过最优点;越小模型迭代越慢,容易找到最优点 |
num_iterations | 迭代次数 | 控制迭代次数 |
max_depth | 树的深度 | 设置树深度,深度越大越有可能过拟合 |
num_leaves | 叶子节点数 | 调节树的复杂程度 |
min_data_in_leaf | 叶子具有最小节点数 | 设置的较大可以避免生成一个过深的树,但有可能导致欠拟合 |
min_sum_hessian_in_leaf | 结点分裂的最小海森值之和 | 也叫min_child_weight,使一个节点分裂的最小海森值之和 |
feature_fraction | 特征子抽样 | 可以用来防止过拟合及提高训练速度 |
bagging_fraction | 降采样 | 相当于subsample样本采样,可以使bagging更快的运行,同时也可以降拟合 |
bagging_freq | 降采样频率 | 表示bagging的频率,0意味着没有使用bagging,k意味着每k轮迭代进行一次bagging |
reg_alpha | L1正则化 | 降低过拟合 |
reg_lambda | L2正则化 | 降低过拟合 |
cat_smooth | 类别平滑 | 设置每个类别需要有的最小个数 |
二gridsearchcv工作机制
GridSearchCV=GridSearch+CV 即网格搜索和交叉验证
网格搜索,搜索的使参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个循环和比较的过程
GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,它要求遍历所有可能参数的组合,在面对大数据集和多参数的情况下,非常耗时。
交叉验证的概念:
- 将训练数据集划分为K份,K一般为10(也有取3~5)
- 依次取其中一份为验证集,其余为训练集训练分类器,测试分类器在验证集上的精度;
- 取K次实验的平均精度为该分类器的平均精度
参数名称及含义如下:
参数名称 | 含义 |
---|---|
estimator | 所使用的分类器 |
param_grid | 值为字典或者列表,即需要最优化的参数的取值 |
scoring | 准确度评价标准 |
cv | 交叉验证参数,没人None,使用三折交叉验证。指定fold数量,默认为3 |
refit | 默认为True,程序会以交叉验证数据集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集 |
iid | 默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均 |
verbose | 日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出 >1:对每个子模型都输出 |
n_jobs | 并行数 int:个数 -1:跟CPU核数一致 默认值为1 |
pre_dispatch | 指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这颗呢我那个导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被赋值pre_dispatch次 |
三 使用gridsearchcv对lightgbm调参
对于基于决策树的模型,调参的方法都是大同小异。一般都需要如下步骤:
- 首先选择较高的学习率 0.1附近 加快收敛速度
- 对决策树基本参数调参
- 正则化参数调参
- 最后降低学习率,这里是为了最后提高准确率
我使用的默认参数如下:
objective = 'binary',
is_unbalance = True,
metric = 'binary_logloss,auc',
max_depth = 6,
num_leaves = 40,
learning_rate = 0.1,
feature_fraction = 0.7,
min_child_samples=21,
min_child_weight=0.001,
bagging_fraction = 1,
bagging_freq = 2,
reg_alpha = 0.001,
reg_lambda = 8,
cat_smooth = 0,
num_iterations = 200,
开始时,需要把学习率和迭代次数调整到一个比较大的值。本人一般刚开始时设置learning_rate=0.1,num_iterations = 200。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!