我使用pandas和scikit learn开发了一个垃圾邮件分类器,现在已经准备好集成到我们的基于Hadoop的系统中。为此,我需要将我的分类器导出到比pickling更常见的格式中。
我首选的导出格式是预测模型标记语言(PMML)。它与我们已经使用的Cascading非常兼容。然而,令人惊讶的是,我找不到任何可以将scikit-learn模型导出为PMML的Python库。
有没有人有这方面的经验?是否有PMML之外的其他替代方案,可以在scikit-learn和Hadoop之间实现互操作性?有没有可靠的PMML导出库?
回答:
您可以使用Py2PMML将模型导出为PMML,然后使用JPMML-Cascading在Hadoop上进行评估。JPMML是开源的,但来自Zementis的Py2PMML似乎是一个商业产品。除了这个替代方案外,没有其他工具可以在Java/Hadoop上评分导出为PMML的Scikit模型。scikit核心团队计划实现一个PMML导出器。不过,如果您不希望使用任何商业解决方案或等待这样的工具被实现,您仍然有一些选择,但它们需要一些编码:
- 调整SKLearn Compiled trees项目,使其生成Java/MapReduce代码而不是C代码。
- 使用
export_graphviz
函数获取每个决策树的DOT表示,并编写一个小的Java解释器。 - 忘记Java和Hadoop,使用Apache Spark,并使用Python、Scikit和PySpark并行评估每个决策树。
希望这对您有帮助!