导出 Scikit Learn Random Forest 以在 Hadoop 平台上使用

Posted

技术标签:

【中文标题】导出 Scikit Learn Random Forest 以在 Hadoop 平台上使用【英文标题】:Exporting a Scikit Learn Random Forest for use on Hadoop Platform 【发布时间】:2014-08-04 10:38:49 【问题描述】:

我使用 pandas 和 scikit learn 开发了一个垃圾邮件分类器,可以将其集成到我们基于 hadoop 的系统中。为此,我需要将我的分类器导出为比酸洗更常见的格式。

预测模型标记语言 (PMML) 是我首选的导出格式。它与我们已经使用的 Cascading 配合得非常好。但是,令人惊讶的是,我找不到任何将 scikit-learn 模型导出到 PMML 的 python 库。

有没有人有过这个用例的经验?是否有任何替代 PMML 的方法可以在 scikit-learn 和 hadoop 之间提供互操作性?一个可靠的 PMML 导出库怎么样?

【问题讨论】:

Quora quora.com/How-do-I-use-scikit-learn-with-Hadoop-and-Mapreduce有一个类似的问题 感谢您的意见。使用流 API 并不理想,但如果一切都失败了,我可能不得不求助于它。 垃圾邮件分类为垃圾邮件?你是怎么开始使用随机森林的? 实际上在这种情况下,它是微博垃圾邮件,我们只针对所有机器生成的消息的子集。相对多样的特征似乎与随机森林相得益彰。 【参考方案1】:

您可以使用 Py2PMML 将模型导出到 PMML,然后使用 JPMML-Cascading 在 Hadoop 上对其进行评估。 JPMML 是开源的,但 Zementis 的 Py2PMML 似乎是一个商业产品。除了这个替代方案之外,没有其他工具可以对在 Java/Hadoop 上导出为 PMML 的 Scikit 模型进行评分。核心 scikit 团队是 planning 来实现 PMML 导出器。但是,如果您不想要任何商业解决方案或等待此类工具的实施,您仍然有一些选择,但它们需要一些编码:

调整SKLearn Compiled trees 项目,使其生成Java/MapReduce 代码而不是C。 使用export_graphviz函数获取每个决策树的DOT表示并编写一个小型Java解释器。 忘记 Java 和 Hadoop,使用 Apache Spark 并使用 Python、Scikit 和 PySpark 并行评估每个决策树。

希望对你有帮助!

【讨论】:

SkLearn 模型到 PMML 的导出现在可以由 JPMML-SkLearn (github.com/jpmml/jpmml-sklearn) 库/命令行应用程序处理。它比 Py2PMML 更健壮且更易于使用。

以上是关于导出 Scikit Learn Random Forest 以在 Hadoop 平台上使用的主要内容,如果未能解决你的问题,请参考以下文章

Scikit learn + Random Forest - 单棵树的特征

Python scikit-learn:导出经过训练的分类器

Scikit learn with GraphViz 导出空输出

逻辑回归-5. scikit-learn中的逻辑回归

LinearSVC sklearn (scikit-learn) 中 C 的行为

将 python scikit 学习模型导出到 pmml