LightGBM,XGBoost被面试官刁难了?内有含泪面试经验
写在最前
文章有很多被转载,我看了,重要的地方由于格式问题,转载网站上并未适配,请大家戳原文链接看原文,有最完整描述。
我用步骤的方式来阐述这一过程
- 先给学习器定一些宏大的目标,这时候需要通用参数的支持。使用
booster
定义我们采取树还是线性方法来作为训练的结构。使用silent
定义系统要不要实时输出训练的内容,比如树的深度和叶子数量什么的。使用nthread
来设置使用多少线程来运行此模型。 - 接下来是学习目标参数。我们要定义
objective
,是我们要拿此模型做回归还是分类?多分类还是二分类?这是总体目标。接下来是eval_metric
,这是评估函数,也是我们的损失函数。我们都知道,模型优化的方向是按照损失函数值下降的方向进行的,所以这很重要。在xgboost的原论文中,我们在XGBoost中的目标函数由两部分构成:其中第一部分便是这个损失函数。第二部分是正则化函数,后面细谈。


这里需要三个参数,gamma
, alpha
,lambda
。值得注意的是,我查遍了xgboost原论文和各类博客,发现并没有关于在数学公式里面的描述。但是它作为l1正则化参数确实有意义并且存在。我猜想可能其大部分情况都为0,导致公式里没有很重视。这里我大胆的将其加了进来。
- 现在已经确定了目标函数,那就拿数据来训练呗。我们训练基本使用GBDT作为核心来训练的。
这个训练过程我们用到有: learning_rate
:每次迭代的梯度下降步长,max_depth
:代表最大树深,colsample_bytree
:每次生成树的时候随机选取列数的比例,colsample_bylevel
:这个就相比于前一个更加细致了,它指的是每棵树每次节点分裂的时候列采样的比例。subsample
:每次训练的时候随机采样的比例,我觉得这应该指的是行采样吧。还有一些我个人不太常用的,比如max_delta_step
:这个参数限制了每棵树权重改变的最大步长。
以上都是些核心的参数,比较常用的。
这篇文章中比较重点的就是树的生成方式,核心的东西讲出来了,面试官应该不会不满意吧。
转载自:https://juejin.cn/post/6844903660820889613