xgboost问题整理

目录

 

xgb问题总结

1、xgboost未学习到交叉特征如何解决分析(性别&年龄)

2、xgboost如何处理离散类特征 

3、xgboost调的参数有哪些

通用参数

Booster参数

学习任务参数

4、调参的通用方法

5、xgb对缺失值是怎么处理的?

6、XGBoost为什么使用泰勒二阶展开?

7、正则惩罚的是什么?

8、XGB寻找最佳分裂点

9. 停止生长

10. XGBoost为什么快

11. XGBoost防止过拟合的方法


xgb问题总结

1、xgboost未学习到交叉特征如何解决分析(性别&年龄)

一般是因为样本中该交叉特征比较稀疏导致的,具体为所有样本中性别和年龄特征同时存在的样本较少,因此在采样过程中需要关注,避免特征稀疏导致学习的效果jiao ch

2、xgboost如何处理离散类特征 

xgboost是不支持category特征的,所以在训练模型前,需要进行预处理,可以根据特征的具体形式来选择:

  • 无序特征:one-hot encoding,比如城市。 类别型变量在范围较小的时候(如[10-100]),推荐使用。one-hot会增加内存开销以及训练开销
  • 有序特征:label encoding,年龄

one-hot encoding : 独热编码,又称为一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。例如:假设地区的特征空间为 [“Europe”,”US”,”Asia”]是三维的,这样,我们可以采用One-Hot编码的方式对样本“[”US”]”编码,“US”对应着[0,1,0],则完整的特征数字化的结果为:[0,1,0]。

label encoding:就是用标签进行编码的意思,即将原始特征值编码为自定义的数字标签完成量化编码过程。假如有三种颜色特征:红、黄、蓝。 在利用机器学习的算法时一般需要进行向量化或者数字化。那么你可能想令 红=1,黄=2,蓝=3. 那么这样其实实现了标签编码,即给不同类别以标签。

为什么能使用One-Hot Encoding?

  • 使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,也是基于的欧式空间。
  • 将离散型特征使用one-hot编码,可以会让特征之间的距离计算更加合理。比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,计算出来的特征的距离是不合理。那如果使用one-hot编码,显得更合理。

3、xgboost调的参数有哪些

XGBoost的参数一共分为三类:

  1. 通用参数:宏观函数控制。

  2. Booster参数:控制每一步的booster(tree/regression)。booster参数一般可以调控模型的效果和计算代价。我们所说的调参,很这是大程度上都是在调整booster参数。

  3. 学习目标参数:控制训练目标的表现。我们对于问题的划分主要体现在学习目标参数上。比如我们要做分类还是回归,做二分类还是多分类,这都是目标参数所提供的。

通用参数

  1. booster:选择每次迭代过程中需要运行的模型。我们有两种参数选择,gbtreegblinear。gbtree是采用树的结构来运行数据,而gblinear是基于线性模型。

  2. silent:设置模型是否有logo打印。静默模式,为1时模型运行不输出。

  3. nthread: 使用线程数,一般我们设置成-1,使用所有线程。如果有需要,我们设置成多少就是用多少线程。

Booster参数

  1. n_estimator: 也作num_boosting_rounds这是生成的最大树的数目,也是最大的迭代次数。

  2. learning_rate: 学习率,可以缩减每一步的权重值,使得模型更加健壮。有时也叫作eta,系统默认值为0.3,典型值一般设置为:0.01-0.2。

  3. gamma:系统默认为0,我们也常用0

    gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。因为gamma值越大的时候,损失函数下降更多才可以分裂节点。所以树生成的时候更不容易分裂节点。范围: [0,∞]

  4. subsample:系统默认为1

    这个参数控制对于每棵树,随机采样的比例。减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。 典型值:0.5-10.5代表平均采样,防止过拟合. 范围: (0,1]注意不可取0

  5. colsample_bytree:系统默认值为1。我们一般设置成0.8左右。

    用来控制每棵随机采样的列数的占比(每一列是一个特征)。 典型值:0.5-1范围: (0,1]

  6. colsample_bylevel:默认为1,我们也设置为1.

    这个就相比于前一个更加细致了,它指的是每棵树每次节点分裂的时候列采样的比例

  7. max_depth: 系统默认值为6

    我们常用3-10之间的数字。这个值为树的最大深度。这个值是用来控制过拟合的。max_depth越大,模型学习的更加具体。设置为0代表没有限制,范围: [0,∞]

  8. max_delta_step:默认0,我们常用0.

    这个参数限制了每棵树权重改变的最大步长,如果这个参数的值为0,则意味着没有约束。如果他被赋予了某一个正值,则是这个算法更加保守。通常,这个参数我们不需要设置,但是当个类别的样本极不平衡的时候,这个参数对逻辑回归优化器是很有帮助的。

  9. lambda:也称reg_lambda,默认值为0

    权重的L2正则化项。(和Ridge regression类似)。这个参数是用来控制XGBoost的正则化部分的。这个参数在减少过拟合上很有帮助。

  10. alpha:也称reg_alpha默认为0,

    权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。

  11. scale_pos_weight:默认为1

    在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。通常可以将其设置为负样本的数目与正样本数目的比值。

学习任务参数

        这类参数主要用来明确学习任务和相应的学习目标的

  • objective [default=reg:linear]
这个主要是指定学习目标的:而分类,还是多分类or回归

“reg:linear” –linear regression:线性回归
“binary:logistic”:二分类
“multi:softmax” :多分类,这个需要指定类别个数
  • eval_metric [default according to objective]
评估方法,主要用来验证数据,根据一个学习目标会默认分配一个评估指标
“rmse”:均方根误差(回归任务)
“error”:分类任务
“map”:平均绝对值误差(平均准确率,排名任务)
  • seed [default=0]
随机数种子,可以用来生成可复制性的结果,也可用来调参

​​​​

4、调参的通用方法

  • 选择一个相对较高的学习率。通常来说学习率设置为0.1。但是对于不同的问题可以讲学习率设置在0.05-0.3。通过交叉验证来寻找符合学习率的最佳树的个数。
  • 当确定好学习率与最佳树的个数时,调整树的某些特定参数。比如:max_depth, min_child_weight, gamma, subsample, colsample_bytree
  • 调整正则化参数 ,比如: lambda, alpha。这个主要是为了减少模型复杂度和提高运行速度的。适当地减少过拟合。
  • 降低学习速率,选择最优参数

5、xgb对缺失值是怎么处理的?

在普通的GBDT策略中,对于缺失值的方法是先手动对缺失值进行填充,然后当做有值的特征进行处理,但是这样人工填充不一定准确,而且没有什么理论依据。而Xgboost采取的策略是先不处理那些值缺失的样本,采用那些有值的样本搞出分裂点,然后在遍历每个分裂点的时候,尝试将缺失样本划入左子树和右子树,选择使损失最优的情况。

6、XGBoost为什么使用泰勒二阶展开?

  1. 直接理解一阶导指引梯度方向,二阶导指引梯度方向如何变化,所以二阶信息本身就能让梯度收敛更快更准确。这里可以对比牛顿法和SGD。牛顿法是二阶收敛,梯度下降是一阶收敛,当初始点选取合理的情况下,牛顿法比梯度下降法收敛的速度快。通俗的讲,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
  2. 可以很方便地自定义损失函数,只要这个损失函数可以求一阶和二阶导

7、正则惩罚的是什么

  • 正则的概念:正则化就是通过对模型参数进行调整(数量和大小),降低模型的复杂度,以达到可以避免过拟合的效果。机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数+额外项,常用的额外项一般有两种,英文称作ℓ1−𝑛𝑜𝑟𝑚ℓ1−norm和ℓ2−𝑛𝑜𝑟𝑚ℓ2−norm,中文称作L1正则化L2正则化,或者L1范数和L2范数。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓惩罚是指对损失函数中的某些参数做一些限制

  • 惩罚的是什么:拟合参数的复杂度
  • 如何惩罚λ为无穷大,在惩罚系数λ无穷大的情况下,为保证整个结构风险函数最小化,只能通过最小化所有权重系数W达到目的了,即通过λ的惩罚降低了参数的权重值,而在降低参数权重值的同时我们就实现了降低模型复杂度的效果。
  • 在机器学习中L1 L2起到的作用是?L1正则化:可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择;L2正则化:可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。

8、XGB寻找最佳分裂点

在分裂一个结点时,我们会有很多个候选分割点,寻找最佳分割点的大致步骤如下:

  • 遍历每个结点的每个特征;
  • 对每个特征,按特征值大小将特征值排序;
  • 线性扫描,找出每个特征的最佳分裂特征值;
  • 在所有特征中找出最好的分裂点(分裂后增益最大的特征及特征值)

上面是一种贪心的方法,每次进行分裂尝试都要遍历一遍全部候选分割点,也叫做全局扫描法。但当数据量过大导致内存无法一次载入或者在分布式情况下,贪心算法的效率就会变得很低,全局扫描法不再适用。基于此,XGBoost提出了一系列加快寻找最佳分裂点的方案:

  • 特征预排序+缓存:XGBoost在训练之前,预先对每个特征按照特征值大小进行排序,然后保存为block结构,后面的迭代中会重复地使用这个结构,使计算量大大减小。
  • 分位点近似法:对每个特征按照特征值排序后,采用类似分位点选取的方式,仅仅选出常数个特征值作为该特征的候选分割点,在寻找该特征的最佳分割点时,从候选分割点中选出最优的一个。
  • 并行查找:由于各个特性已预先存储为block结构,XGBoost支持利用多个线程并行地计算每个特征的最佳分割点,这不仅大大提升了结点的分裂速度,也极利于大规模训练集的适应性扩展。

9. 停止生长

  • 当新引入的一次分裂所带来的增益Gain<0时,放弃当前的分裂。这是训练损失和模型结构复杂度的博弈过程。
  • 当树达到最大深度时,停止建树,因为树的深度太深容易出现过拟合,这里需要设置一个超参数max_depth。

  • 当引入一次分裂后,重新计算新生成的左、右两个叶子结点的样本权重和。如果任一个叶子结点的样本权重低于某一个阈值,也会放弃此次分裂。这涉及到一个超参数:最小样本权重和,是指如果一个叶子节点包含的样本数量太少也会放弃分裂,防止树分的太细,这也是过拟合的一种措施。

10. XGBoost为什么快

  • 分块并行:训练前每个特征按特征值进行排序并存储为Block结构,后面查找特征分割点时重复使用,并且支持并行查找每个特征的分割点
  • 候选分位点:每个特征采用常数个分位点作为候选分割点
  • CPU cache 命中优化: 使用缓存预取的方法,对每个线程分配一个连续的buffer,读取每个block中样本的梯度信息并存入连续的Buffer中。
  • Block 处理优化:Block预先放入内存;Block按列进行解压缩;将Block划分到不同硬盘来提高吞吐

11. XGBoost防止过拟合的方法

XGBoost在设计时,为了防止过拟合做了很多优化,具体如下:

  • 目标函数添加正则项:叶子节点个数+叶子节点权重的L2正则化
  • 列抽样:训练的时候只用一部分特征(不考虑剩余的block块即可)
  • 子采样:每轮计算可以不使用全部样本,使算法更加保守
  • shrinkage: 可以叫学习率或步长,为了给后面的训练留出更多的学习空间

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值