开发者社区 问答 正文

用spark对原始数据做特征处理,最后通过决策树分类,请问怎么导出通过输入原始数据做分类的模型?

环境:scala 2.11.11,spark2.4,pmml

步骤描述:最近看了阿里PAI的产品,想仿照写一个小的例子。我定义了多个object class,每个class完成一种数据处理功能,然后输出一个新的文件提供给下一个class作为输入,从而完成一连串的数据转换及特征提取工作,最后输出文件用于决策树分类训练,从而得到训练模型。

问题:请问我该如何导出最终训练完的模型?如何只在决策树class中导出pmml模型,那么此pmml模型是不是不包含前面的一串数据处理方法?如果我部署此pmml模型,那么调用的时候是不是不能直接传入源数据?

如下图所示,每一个节点都是一个object class,需求是导出可通过输入原始数据做分类的模型

选区_010.png

本人机器学习小白,谢谢帮助

展开
收起
游客wtq6uww4oujtw 2019-11-22 10:18:05 714 分享 版权
阿里云 AI 助理回答

在使用Scala和Spark进行机器学习模型训练,并希望导出为PMML(Predictive Model Markup Language)格式时,您需要确保所使用的库支持PMML导出。对于Spark MLlib,它本身并不直接支持PMML输出,但您可以借助第三方库如JPMML-Spark来实现这一需求。

导出最终训练完的模型为PMML

  1. 添加依赖:首先,您需要在项目中加入JPMML-Spark的依赖,以便能够将Spark模型转换为PMML。在您的build.sbt或相应构建文件中添加如下依赖:

    libraryDependencies += "org.jpmml" % "jpmml-sparkml_2.11" % "1.6.5"
    

    注意版本号可能需要根据当前可用版本进行调整,并且确保与您的Scala版本匹配。

  2. 模型转换:在您的决策树模型训练完成后,使用JPMML-Spark库将模型转换为PMML格式。以下是一个简化的示例代码段:

    import org.jpmml.sparkml._
    
    // 假设dtModel是已经训练好的Spark决策树模型
    val dtModel: DecisionTreeClassificationModel = ...
    
    // 将Spark模型转换为PMML模型
    val pmml = new SparkMLConverter().convert(dtModel)
    
    // 将PMML模型保存到文件
    pmml.save(new File("path/to/your/model.pmml"))
    

关于数据处理方法的问题

  • PMML模型主要关注模型结构和参数,不直接包含数据预处理逻辑。因此,如果您在训练前有一系列的数据处理步骤(比如特征提取、标准化等),这些步骤不会被嵌入到PMML模型中。这意味着当您部署此PMML模型时,确实不能直接传入原始数据,而是需要在调用模型之前,先按照训练时相同的步骤对数据进行预处理。

部署及调用

  • 在部署PMML模型时,您需要确保部署环境(例如使用阿里云PAI-DSW或EAS服务)支持PMML模型的导入和执行,并且能够提供相应的数据预处理机制。
  • 调用模型时,您需要先应用同样的数据清洗和特征工程流程处理输入数据,使其达到模型训练时的格式要求,然后将处理后的数据输入到PMML模型进行预测。

综上所述,虽然PMML模型本身不包括数据预处理逻辑,但通过确保在部署和调用模型时遵循相同的数据处理流程,仍然可以实现从原始数据到分类预测的整个工作流。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答