【转】XGBoost和LGB参数对比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【转】XGBoost和LGB参数对比相关的知识,希望对你有一定的参考价值。

参考技术A

原文: https://blog.csdn.net/zwqjoy/article/details/90637423

XGBoost的参数一共分为三类( 完整参数请戳 官方文档 )

objective [缺省值=reg:linear]

eval_metric [缺省值=通过目标函数选择]

一般来说,我们都会使用 xgboost.train(params, dtrain) 函数来训练我们的模型。这里的 params 指的是 booster 参数。

XGBoost 一共有三类参数 通用参数,学习目标参数,Booster参数 ,那么对于LightGBM,我们有核心参数,学习控制参数,IO参数,目标参数,度量参数,网络参数,GPU参数,模型参数,这里我常修改的便是 核心参数,学习控制参数,度量参数 等。更详细的请看 LightGBM中文文档

xgboost回归代码及lgb参数说明

了解xgboost 找到网络一个图 侵删 感谢原作者提供图
https://pic3.zhimg.com/v2-07783eb41e619927e8911b85442b9e38_r.jpg

技术分享图片
xgboost训练回归模型很简单,按照前面的博客安装了xgboost库之后:

xgboost的参数说明如下代码:

params={
‘booster‘:‘gbtree‘,
‘objective‘: ‘multi:softmax‘, #多分类的问题
‘num_class‘:10, # 类别数,与 multisoftmax 并用
‘gamma‘:0.1,  # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。
‘max_depth‘:12, # 构建树的深度,越大越容易过拟合
‘lambda‘:2,  # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
‘subsample‘:0.7, # 随机采样训练样本
‘colsample_bytree‘:0.7, # 生成树时进行的列采样
‘min_child_weight‘:3, 
# 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言
#,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。
#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。 
‘silent‘:0 ,#设置成1则没有运行信息输出,最好是设置为0.
‘eta‘: 0.007, # 如同学习率
‘seed‘:1000,
‘nthread‘:7,# cpu 线程数
#‘eval_metric‘: ‘auc‘
}

使用代码如下:

import xgboost as xgb

data_train = xgb.DMatrix(train1[feature_use].fillna(-1), label=train1[‘target‘])
data_test = xgb.DMatrix(test1[feature_use].fillna(-1), label=test1[‘target‘])
watch_list = [(data_test, ‘eval‘), (data_train, ‘train‘)]
param = {‘max_depth‘: 5, ‘eta‘: 0.01, ‘silent‘: 1, ‘objective‘: ‘reg:linear‘,‘num_boost_round‘:950,‘subsample‘:0.8,‘colsample_bytree‘:0.2319,‘min_child_weight‘:11}
bst = xgb.train(param, data_train, num_boost_round=950, evals=watch_list)
y_pred = bst.predict(data_test)

print("xgboost success")

其中的 train test都为 pandas中的dataframe类型

lgb参数说明如下:
参考中文文档路径 http://lightgbm.apachecn.org/cn/latest/Parameters.html#id2

通过上一篇博客中的粒子群算法可以确定一个参数的范围
然后根据数据的情况对参数进行微调

其中有几个参数尤其要注意:

num_iterations, default=100, type=int, alias=num_iteration, num_tree, num_trees, num_round, num_rounds, num_boost_round
boosting 的迭代次数
Note: 对于 Python/R 包, 这个参数是被忽略的, 使用 train and cv 的输入参数 num_boost_round (Python) or nrounds (R) 来代替
Note: 在内部, LightGBM 对于 multiclass 问题设置 num_class * num_iterations 棵树

该参数调大可以更好拟合模型 也会导致过拟合,

抽样考虑的特征数量:
feature_fraction, default=1.0, type=double, 0.0 < feature_fraction < 1.0, alias=sub_feature, colsample_bytree
如果 feature_fraction 小于 1.0, LightGBM 将会在每次迭代中随机选择部分特征. 例如, 如果设置为 0.8, 将会在每棵树训练之前选择 80% 的特征
可以用来加速训练
可以用来处理过拟合

参数之间是互相配合的
这些参数要根据你的数据集的分布情况和大小来确定

例如《集成学习》中有个说明基学习器个数和特征维数的关系:
技术分享图片
d是特征维数 m为基学习器个数 也就是 基学习器个数应该随着特征维数增多而增加。
希望多多交流
技术分享图片

以上是关于【转】XGBoost和LGB参数对比的主要内容,如果未能解决你的问题,请参考以下文章

AutoML之flaml:基于flaml框架对比lightgbm和xgboost模型进行自动化参数调优实现体内脂肪含量值回归预测案例之详细攻略

XGBoost与GBDT(一)-几种最优化方法对比

GBDT与XGBoost速度对比

GBDT与XGBoost速度对比

GBDT与XGBoost速度对比

GBDT与XGBoost速度对比