注:下有视频讲解,可供参考
XGBoost是一种经典的集成式提升算法框架,具有训练效率高、预测效果好、可控参数多、使用方便等特性,是大数据分析领域的一柄利器。在实际业务中,XGBoost经常被运用于用户行为预判、用户标签预测、用户信用评分等项目中。
XGBoost 是对梯度提升算法的改进,求解损失函数极值时使用了牛顿法,将损失函数泰勒展开到二阶,另外损失函数中加入了正则化项。
1.集成学习
集成学习(ensemble learning)可以说是现在非常火爆的机器学习方法了。它本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影。
2.机器学习模型
3.Bagging和Boosting
Bagging每次从原始数据集中有放回的随机抽样n个样本形成自助训练集,重复S次后得到S个新的训练集。对每个自助训练集应用弱分类器,这样就得到了S个弱分类器。最后将预测数据放在这S个弱分类器上计算,计算结果采用投票方式(分类问题)和简单求平均(回归问题)即可。
在 bagging 的方法中,最广为熟知的就是随机森林了:bagging + 决策树 = 随机森林。
Boosting在初始化时赋予每个样本的权重都相同为1/m。第一轮训练完成后,弱分类器对预测错误的样本给了较大的权重,那么在第二轮训练中就会更加重视这些权重大的样本。这样迭代训练n轮后得到n个弱分类器,最后会给这n个弱分类器分配不同的权重,一般分类误差小的权重越大。对于最终的结果会根据n个带权重的分类器通过投票法产生。
4.Bagging和Boosting的区别
1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的.
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化.而权值是根据上一轮的分类结果进行调整.
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大.
3)预测函数:
Bagging:所有预测函数的权重相等.
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重.
4)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果.
5.梯度提升算法(Gradient boosting)
XGBoost的基础为梯度提升算法,是集成学习当中Boosting的代表算法。集成算法通过在数据上构建多个弱评估器,整合所有的弱评估器的预测结果,以获得比单个弱评估器更好的回归和分类结果。其中弱评估器定义为至少比随机猜测好的模型,即预测结果不低于50%的模型。Xgboost是根据梯度提升树发展而来的。
6.X Gradient Boosting Model
7.实例
8.XGBoost参数
常用参数:
Tree Booster参数:
1) eta [default=0.3]:shrinkage参数,用于更新叶子节点权重时,乘以该系数,避免步长过大。参数值越大,越可能无法收敛。把学习率 eta 设置的小一些,小学习率可以使得后面的学习更加仔细。
2) min_child_weight [default=1]:这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。
3) max_depth [default=6]: 每颗树的最大深度,树高越深,越容易过拟合。
4) gamma [default=0]:在树的叶子节点上作进一步分区所需的最小损失减少。越大,算法越保守。[0,∞]
5) max_delta_step [default=0]:这个参数在更新步骤中起作用,如果取0表示没有约束,如果取正值则使得更新步骤更加保守。可以防止做太大的更新步子,使更新更加平缓。 通常,这个参数是不需要的,但它可能有助于逻辑回归时,类是非常不平衡。设置它的值为1-10可能有助于控制更新。
6) subsample [default=1]:样本随机采样,较低的值使得算法更加保守,防止过拟合,但是太小的值也会造成欠拟合。
7) colsample_bytree [default=1]:列采样,对每棵树的生成用的特征进行列采样.一般设置为: 0.5-1
8) lambda [default=1]:控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
9) alpha [default=0]:控制模型复杂程度的权重值的 L1 正则项参数,参数值越大,模型越不容易过拟合。
10) scale_pos_weight [default=1]如果取值大于0的话,在类别样本不平衡的情况下有助于快速收敛。
11) tree_method[default=’auto’]可选 {‘auto’, ‘exact’, ‘approx’} 贪心算法(小数据集)/近似算法(大数据集)。
9.XGBoost为什么快
●分块并行:训练前每个特征按特征值进行排序并存储为Block结构,后面查找特征分割点时重复使用,并且支持并行查找每个特征的分割点。
●候选分位点:每个特征采用常数个分位点作为候选分割点。
●CPU cache 命中优化: 使用缓存预取的方法,对每个线程分配一个连续的buffer,读取每个block中样本的梯度信息并存入连续的Buffer中。
●Block 处理优化:Block预先放入内存;Block按列进行解压缩;将Block划分到不同硬盘来提高吞吐。
10.代码
https://github.com/LeBron-Jian/MachineLearningNote
XGBoost
XGBoost代码讲解
分享人:刘琪伟
分享时间:2022/4/21
分享平台:腾讯会议
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)