likes
comments
collection
share

LightGBM,XGBoost被面试官刁难了?内有含泪面试经验

作者站长头像
站长
· 阅读数 29

写在最前

文章有很多被转载,我看了,重要的地方由于格式问题,转载网站上并未适配,请大家戳原文链接看原文,有最完整描述。

我用步骤的方式来阐述这一过程

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

这里需要三个参数,gammaalphalambda。值得注意的是,我查遍了xgboost原论文和各类博客,发现并没有关于LightGBM,XGBoost被面试官刁难了?内有含泪面试经验在数学公式里面的描述。但是它作为l1正则化参数确实有意义并且存在。我猜想可能其大部分情况都为0,导致公式里没有很重视。这里我大胆的将其加了进来。

  1. 现在已经确定了目标函数,那就拿数据来训练呗。我们训练基本使用GBDT作为核心来训练的。

这个训练过程我们用到有: learning_rate:每次迭代的梯度下降步长,max_depth :代表最大树深,colsample_bytree :每次生成树的时候随机选取列数的比例,colsample_bylevel:这个就相比于前一个更加细致了,它指的是每棵树每次节点分裂的时候列采样的比例。subsample:每次训练的时候随机采样的比例,我觉得这应该指的是行采样吧。还有一些我个人不太常用的,比如max_delta_step:这个参数限制了每棵树权重改变的最大步长。

以上都是些核心的参数,比较常用的。

这篇文章中比较重点的就是树的生成方式,核心的东西讲出来了,面试官应该不会不满意吧。

转载自:https://juejin.cn/post/6844903660820889613
评论
请登录