带有随机森林的 Spark 流程数据框

Posted

技术标签:

【中文标题】带有随机森林的 Spark 流程数据框【英文标题】:Spark Process Dataframe with Random Forest 【发布时间】:2016-04-30 23:52:12 【问题描述】:

使用Spark 1.5.1, MLLib Random Forest Probability 的答案,我能够使用ml.classification.RandomForestClassifier 训练一个随机森林,并使用经过训练的随机森林处理一个保留数据帧。

我遇到的问题是,我想保存这个经过训练的随机森林,以便将来处理任何数据帧(与训练集具有相同的特征)。

classification example on this page 使用mllib.tree.model.RandomForestModel,它展示了如何保存经过训练的森林,但据我所知,只能在LabeledPoint RDD 上进行训练(并在未来进行处理)。我对LabeledPoint RDD 的问题是它只能包含标签双精度和特征向量,所以我会丢失所有用于其他目的的非标签/非特征列。

所以我想我需要一种方法来保存ml.classification.RandomForestClassifier 的结果,或者构造一个LabeledPoint RDD,它可以保留除通过mllib.tree.model.RandomForestModel 训练的森林所需的标签和特征之外的列。

任何人都知道为什么 ML 和 MLlib 库同时存在而不只是其中一个存在吗?

非常感谢您阅读我的问题,并提前感谢您提供任何解决方案/建议。

【问题讨论】:

【参考方案1】:

我将重复使用 spark 编程指南中所说的内容:

spark.ml 包旨在提供一套基于 DataFrame 构建的统一高级 API,帮助用户创建和调整实用的机器学习管道。

在 Spark 中,核心功能是它的 RDD。如果您有兴趣,有一篇关于该主题的优秀论文,我可以稍后添加链接。

MLLib 出现了,它最初是一个独立的库,后来被 Spark 项目所吸引。尽管如此,Spark 中的所有机器学习算法都是在 RDD 上编写的。

然后将 DataFrame 抽象添加到项目中,因此需要一种更实用的方法来构建机器学习应用程序,包括转换器和评估器以及最重要的管道。

就此而言,数据工程师或科学家不需要研究底层技术。因此抽象。

您可以同时使用这两种方法,但您需要记住,您在 ML 中使用的所有算法都是在 MLlib 中创建的,然后进行抽象以便于使用。

【讨论】:

感谢 Eliasah,它阐明了 ml 和 mllib 之间的区别。我的主要问题是能够保存经过训练的随机森林,并预测数据帧的值而不是标记点 rdd。对此有什么想法吗? 预测有什么问题?您是否阅读了我在问题中发布的链接上的答案?恐怕你在这里不是很清楚。你想在上面使用 ML 保存和预测吗? ML 允许您在数据帧上进行预测,但不允许您保存。 MLLIB 允许您保存,但不允许您在数据帧上进行预测(仅在标记点 RDD 上)。我想保存随机森林(如 MLLIB 允许,而 ML 不允许)并使用保存的森林来预测数据帧(如 MLLIB 不允许,而 ML 允许) 最后还是一样的算法。但不幸的是,保存方法目前在 ML 中不可用。我相信这是一个 JIRA 问题,所以现在的解决方案是使用标记点和 mllib 创建您的模型。不幸的是,即使 PMML 导出也不适用于 ML 上的 RF。

以上是关于带有随机森林的 Spark 流程数据框的主要内容,如果未能解决你的问题,请参考以下文章

spark 随机森林算法案例实战

使用带有特征和类名称的 graphviz 可视化随机森林中的树

数据结构-集成算法-随机森林

数据结构-集成算法-随机森林

带有列名的pyspark随机森林分类器特征重要性

Spark MLlib 随机森林训练中可以使用样本权重吗?