阿里云天池机器学习训练营笔记

本学习笔记为阿里云天池龙珠计划机器学习训练营的学习内容,学习链接为:AI训练营机器学习-阿里云天池 (aliyun.com)

一、学习知识点概要

1.XGBoost的介绍

2.XGboost的应用

3.XGBoost的重要参数

二、学习内容

1.XGBoost的介绍

XGBoost是2016年由华盛顿大学陈天奇老师带领开发的一个可扩展机器学习系统。严格意义上讲XGBoost并不是一种模型,而是一个可供用户轻松解决分类、回归或排序问题的软件包。它内部实现了梯度提升树(GBDT)模型,并对模型中的算法进行了诸多优化,在取得高精度的同时又保持了极快的速度,在一段时间内成为了国内外数据挖掘、机器学习领域中的大规模杀伤性武器。

 2.XGBoost的应用

XGBoost在机器学习与数据挖掘领域有着极为广泛的应用。据统计在2015年Kaggle平台上29个获奖方案中,17只队伍使用了XGBoost;在2015年KDD-Cup中,前十名的队伍均使用了XGBoost,且集成其他模型比不上调节XGBoost的参数所带来的提升。这些实实在在的例子都表明,XGBoost在各种问题上都可以取得非常好的效果。

同时,XGBoost还被成功应用在工业界与学术界的各种问题中。例如商店销售额预测、高能物理事件分类、web文本分类;用户行为预测、运动检测、广告点击率预测、恶意软件分类、灾害风险预测、在线课程退学率预测。虽然领域相关的数据分析和特性工程在这些解决方案中也发挥了重要作用,但学习者与实践者对XGBoost的一致选择表明了这一软件包的影响力与重要性。

3.算法实战

详情参看:机器学习-XGBoost_天池notebook-阿里云天池 (aliyun.com)

三、学习问题与解答

1.比较XGBoost 与 GBDT

事实上,如果不考虑⼯程实现、解决问题上的⼀些差异,XGBoost 与 GBDT ⽐较⼤的不同就是⽬标函数的 定义,但这俩在策略上是类似的,都是聚焦残差(更准确的说, XGBoost 其实是GBDT 算法在⼯程上的⼀种实现⽅式),GBDT旨在通过不断加⼊新的树最快速度降低残差,⽽ XGBoost 则可以⼈为定义损失函 数(可以是最⼩平⽅差、logistic loss function、hinge loss function 或者⼈为定义的 loss function), 只需要知道该loss function对参数的⼀阶、⼆阶导数便可以进⾏ boosting,其进⼀步增⼤了模型的泛化能 ⼒,其贪婪法寻找添加树的结构以及 loss function 中的损失函数与正则项等⼀系列策略也使得 XGBoost 预测更准确。

2.XGBoost的重要参数

1.eta[默认0.3]
通过为每一颗树增加权重,提高模型的鲁棒性。
典型值为0.01-0.2。

2.min_child_weight[默认1]
决定最小叶子节点样本权重和。
这个参数可以避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。
但是如果这个值过高,则会导致模型拟合不充分。

3.max_depth[默认6]
这个值也是用来避免过拟合的。max_depth越大,模型会学到更具体更局部的样本。
典型值:3-10

4.max_leaf_nodes
树上最大的节点或叶子的数量。
可以替代max_depth的作用。
这个参数的定义会导致忽略max_depth参数。

5.gamma[默认0]
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关。

6.max_delta_step[默认0]
这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。
但是当各类别的样本十分不平衡时,它对分类问题是很有帮助的。

7.subsample[默认1]
这个参数控制对于每棵树,随机采样的比例。
减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。
典型值:0.5-1

8.colsample_bytree[默认1]
用来控制每棵随机采样的列数的占比(每一列是一个特征)。
典型值:0.5-1

9.colsample_bylevel[默认1]
用来控制树的每一级的每一次分裂,对列数的采样的占比。
subsample参数和colsample_bytree参数可以起到相同的作用,一般用不到。

10.lambda[默认1]
权重的L2正则化项。(和Ridge regression类似)。
这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。

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

12.scale_pos_weight[默认1]
在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。

13.booster:gbtree, 这个指定基分类器。

14.objective: multi:softmax , 多分类的问题, 这个是优化⽬标,必须得有,因为XGBoost⾥⾯有求⼀阶 导数和⼆阶导数,其实就是这个。
15.num_class: 10, 类别数,与 multisoftmax 并⽤。

3.XGBoost相⽐于GBDT有哪些优点 或缺点

GBDT 是机器学习算法, XGBoost GBDT 的⼯程实现。优点如下:
精度更⾼: GBDT 只⽤到⼀阶泰勒, ⽽ XGBoost 对损失函数进⾏了⼆阶泰勒展开, ⼀⽅⾯为了
增加精 度, 另⼀⽅⾯也为了能够⾃定义损失函数,⼆阶泰勒展开可以近似⼤量损失函数
灵活性更强: GBDT CART 作为基分类器,⽽ XGBoost 不仅⽀持 CART ,还⽀持线性分类器,另外,XGBoost ⽀持⾃定义损失函数,只要损失函数有⼀⼆阶导数。
正则化: XGBoost 在⽬标函数中加⼊了正则,⽤于控制模型的复杂度。有助于降低模型⽅差,防⽌过拟 合。正则项⾥包含了树的叶⼦节点个数,叶⼦节点权重的 L2 范式。这个东⻄的好处,就是 XGBoost 在 构建树的过程中,就可以进⾏树复杂度的控制,⽽不是像 GBDT 那样, 等树构建好了之后再进⾏剪枝。
Shrinkage (缩减):相当于学习速率。这个主要是为了削弱每棵树的影响,让后⾯有更⼤的学习空间, 学习过程更加的平缓
缺失值处理:这个是 XGBoost 的稀疏感知算法,加快了节点分裂的速度, 传统的 GBDT 没有设计对缺 失值的处理, ⽽ XBOOST 能⾃动学习出缺失值的处理策略。
并⾏化操作:块结构可以很好的⽀持并⾏计算

缺点:虽然利⽤了预排序和近似算法可以降低寻找最优分裂点的计算量,但在节点分裂过程中仍需要遍历整个数据集。预排序过程的空间复杂度过⾼,不仅需要存储特征值,还需要存储特征对应样本梯度统计值的索引,相当于消耗了两倍的内存。所以在内存和计算⽅⾯还是有很⼤的优化空的。

四、学习思考与总结

XGBoost底层实现了GBDT算法,并对GBDT算法做了一系列优化:

  1. 对目标函数进行了泰勒展示的二阶展开,可以更加高效拟合误差。
  2. 提出了一种估计分裂点的算法加速CART树的构建过程,同时可以处理稀疏数据。
  3. 提出了一种树的并行策略加速迭代。
  4. 为模型的分布式算法进行了底层优化。

XGBoost是基于CART树的集成模型,它的思想是串联多个决策树模型共同进行决策。XGBoost的基模型是CART回归树,它有两个特点:

(1)CART树,是一颗二叉树。

(2)回归树,最后拟合结果是连续值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值