GBDT(Gradient Boosting Decision Tree):梯度提升决策树 是一种集成使用多个弱分类器(决策树)来提升分类效果的机器学习算法,在很多分类和回归的场景中,都有不错的效果。
如图1所示,这是是对一群消费者的消费力进行预测的例子。简单来说,处理流程为:
GBDT的训练方法中,核心是一种叫梯度直方图的数据结构,需要为每一个特征建立一阶梯度直方图和二阶梯度直方图。 梯度直方图的大小与三个因素有关:特征数量、分裂点数量、分类数量和树节点的数量。
已有的分布式GBDT系统使用数据并行的方法,将训练数据按行进行切分,每个计算节点使用分配的数据集建立梯度直方图,通过网络汇总这些梯度直方图后,计算得出最佳的分裂点。 但是当训练数据维度高、分类多、树深度大的时候,梯度直方图的大小较大,数据并行的训练方法有几个缺点:
为了解决数据并行的训练方式的缺点,Angel实现了特征并行的训练方式。
与数据并行的训练方式不同,Angel按列切分训练数据,我们把这种分布式训练方式叫做特征并行,训练的流程如图2所示:
与数据并行相比,特征并行使得每个计算节点只需要存储一部分的梯度直方图,减少存储开销,使得可以增大分裂点数量和树深度来提升模型精度。 另一方面,特征并行不需要通过网络汇总梯度直方图,在高维场景下更为高效,传输分裂结果的网络开销可以通过二进制编码来降低。
算法参数
输入输出参数
使用spark提交任务
./spark-submit
--master yarn-cluster \
--conf spark.ps.jars=$SONA_ANGEL_JARS \\
--conf spark.ps.cores=1
--conf spark.ps.memory=10g
--conf spark.ps.log.level=INFO
--queue $queue
--jars $SONA_SPARK_JARS
--name "GBDT on Spark-on-Angel"
--driver-memory 5g \\
--num-executors 10 \\
--executor-cores 1 \\
--executor-memory 10g \\
--class com.tencent.angel.spark.ml.tree.gbdt.trainer.GBDTTrainer \\
spark-on-angel-mllib-${ANGEL_VERSION}.jar \
ml.gbdt.task.type:classification
angel.train.data.path:XXX angel.validate.data.path:XXX angel.save.model.path:XXX \
ml.gbdt.loss.func:binary:logistic ml.gbdt.eval.metric:error,log-loss \
ml.learn.rate:0.1 ml.gbdt.split.num:10 ml.gbdt.tree.num:20 ml.gbdt.tree.depth:7 ml.num.class:2 \
ml.feature.index.range:47237 ml.gbdt.feature.sample.ratio:1.0 ml.gbdt.multi.class.strategy:one-tree ml.gbdt.min.node.instance:100
使用spark提交任务
./spark-submit
--master yarn-cluster \
--conf spark.ps.jars=$SONA_ANGEL_JARS \\
--conf spark.ps.cores=1
--conf spark.ps.memory=10g
--conf spark.ps.log.level=INFO
--queue $queue
--jars $SONA_SPARK_JARS
--name "GBDT on Spark-on-Angel"
--driver-memory 5g \\
--num-executors 10 \\
--executor-cores 1 \\
--executor-memory 10g \\
--class com.tencent.angel.spark.ml.tree.gbdt.predictor.GBDTPredictor \\
spark-on-angel-mllib-${ANGEL_VERSION}.jar
angel.load.model.path:XXX angel.predict.data.path:XXX angel.predict.out.path:XXX \
评测腾讯的内部的数据集来比较Angel和XGBoost的性能。
训练数据
数据集 | 数据集大小 | 数据数量 | 特征数量 | 任务 |
---|---|---|---|---|
UserGender | 145GB | 1.2亿 | 33万 | 二分类 |
实验环境
实验所使用的集群是腾讯的线上Gaia集群(Yarn),单台机器的配置是: * * CPU: 2680 * 2 * 内存:256 GB * 网络:10G * 2 * 磁盘:4T * 12 (SATA)
参数配置
Angel和XGBoost使用如下的参数配置:
* 树的数量:20
* 树的最大高度:8
* 梯度直方图大小:10
* 学习速度:0.1(XGboost)、0.1(Angel)
* 工作节点数据:50
* 每个工作节点内存:20GB
实验结果
系统 | 数据集 | 每棵树时间 | 测试集误差 |
---|---|---|---|
XGBoost | UserGender | 438s | 0.15 |
Angel | UserGender | 79s | 0.15 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。