云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

阿里云_代理上网服务器_多少钱

小七 141 0

MLlib中的可伸缩决策树

这是一篇与我们在折纸逻辑的朋友一起写的帖子。折纸逻辑提供了一个营销智能平台,使用apachespark在后端进行繁重的分析工作。决策树及其集合是用于分类和回归的机器学习任务的工业机器。决策树易于解释,处理分类和连续特征,扩展到多类分类,不需要特征缩放,能够捕捉非线性和特征交互。由于其流行性,几乎每个机器学习库都提供了决策树算法的实现。然而,大多数都是为单机计算而设计的,很少能优雅地缩放到分布式设置。apachespark是实现可伸缩分布式决策树的理想平台,因为Spark的内存计算允许我们高效地对训练数据集执行多次传递。大约一年前,开源开发人员联手推出了一个快速分布式决策树实现,该实现自1.0版以来一直是Spark MLlib库的一部分。Spark社区从那时起就积极改进了决策树代码。这篇博客文章描述了实现,重点介绍了一些重要的优化,并展示了测试结果,展示了可伸缩性。spark1.1中的新特性:MLlib决策树现在支持多类分类,并包括一些性能优化。除了Scala和Java之外,现在还有Python的api。算法背景在较高的层次上,决策树模型可以被认为是层次化的if-else语句,用于测试特征值以预测标签。下面显示了一个二进制分类任务的示例模型。这是基于20世纪70年代的汽车里程数据!它根据重量(重/轻)和马力预测车辆的行驶里程(高/低)。通过自上而下构建树,从训练数据集中学习模型。选择if-else语句,也称为分割准则,是为了最大化信息增益的概念——与父节点相比,它减少了底层(两)子节点中标签的可变性。学习后的决策树模型可以用来预测新实例的标签。这些模型是可解释的,并且在实践中通常很有效。使用集成树算法,还可以将树组合起来以构建更强大的模型。在分类和回归任务中,像随机森林和增强树这样的树木组合通常是行业中表现最好的。简单API下面的例子展示了如何使用spark1.1中新的pythonapi,使用几行代码轻松地训练MLlib中的决策树。它读取数据集,训练决策树模型,然后测量模型的训练误差。Java和Scala示例可以在DecisionTree的Spark文档中找到。从pyspark.mllib.回归导入标签点从pyspark.mllib.tree导入决策树从pyspark.mllib.util导入MLUtils将数据文件加载并解析为LabeledPoint的RDD。缓存数据,因为我们将再次使用它来计算训练误差。数据=MLUtils.loadLibSVMFile(sc,'我的数据.txt').cache()训练决策树模型。型号=决策树.trainClassifier(数据,numClasses=2,categoricalFeaturesInfo={},#所有特征都是连续的杂质='gini',最大深度=5,最大值=32)训练实例评估模型并计算训练误差预测=模型.预测(数据.map(λx:x.特征)标签预测=数据.mapλ(lp:lp.标签).zip(预测)列车员=labelsPredictions.filter标签预测(兰姆达(v,p):v!=p.count()\/浮动(数据.计数())print('训练错误='+str(trainer))print('学习的分类树模型:')打印(模型)优化实施Spark由于其复杂的DAG执行引擎和用于迭代计算的内存缓存,是实现可伸缩分布式决策树的理想计算平台。我们提到了一些关键的优化。分层训练:我们同时为树的同一级别的所有节点选择分割。这种逐层优化以指数级的方式减少了对数据集的传递次数:我们为每个级别进行一次传递,而不是为树中的每个节点进行一次传递。它在I/O、计算和通信方面节省了大量资源。近似分位数:单机实现通常使用连续特征的排序唯一特征值作为最佳分割计算的分割候选。但是,在分布式数据集上查找排序的唯一值是一项昂贵的操作。MLlib决策树使用每个特征的分位数作为分割候选。这是一个标准的折衷方案,可以在不显著降低准确性的情况下提高决策树的性能。避免map操作:决策树的早期原型实现在为树节点选择最佳分割时同时使用map和reduce操作。利用预先计算出的候选结构,有效地避免了已知的计算步骤的分裂。分箱计算:最好的分割计算将特征离散到箱子中,这些箱子用于计算足够的统计数据进行分割。我们预先计算每个实例的二进制表示,节省每次迭代的计算量。可扩展性我们用不同数据集和簇大小的实验结果证明了MLlib决策树的可伸缩性。按数据集大小缩放下面的两个图显示了当我们缩放数据集中的实例和特征的数量时决策树的训练时间。培训时间线性增加,突出了实现的可伸缩性。这些测试是在一个EC2集群上运行的,它有一个主节点和15个工作节点,使用r3.2x大型实例(8个虚拟cpu,61gb内存)。树被构建成6个级别,数据集由spark perf库生成。Spark 1.1加速下面两个图显示了ApacheSpark1.1相对于原始ApacheSpark1.0实现的改进。在相同的数据集和集群上,新的实现在许多数据集上的速度提高了4-5倍!下一步是什么?1.1版以后的基于树的算法开发将主要集中在集成算法上,如随机森林和boosting。我们还将继续优化决策树代码的性能,并计划在即将发布的版本中添加对更多选项的支持。要开始自己使用决策树,请立即下载Spark 1.1!进一步阅读请参阅MLlib决策树文档中的示例和API。观看2014年Spark峰会的决策树演示。看看2014年9月在旧金山斯卡拉/湾区机器学习会议上关于决策树的另一次演讲的视频和幻灯片。 致谢Spark MLlib决策树工作最初是与Hirakendu Das(雅虎实验室)、Evan Sparks(加州大学伯克利分校AMPLab)、Ameet Talwalkar和Xiangrui Meng(Databricks)联合完成的。从那以后,更多的贡献者加入了我们,我们也欢迎你的意见!免费试用Databricks。今天就开始吧