【问题标题】:Pipeline does not get converted to PMML properly using JPMML and Pyspark管道未使用 JPMML 和 Pyspark 正确转换为 PMML
【发布时间】:2017-03-20 09:39:33
【问题描述】:

我正在使用 Pyspark 和 JPMML 库从我的管道模型生成 PMML 模型。但我认为它不能正常生成。为了测试这一点,我使用相同的数据集和分类器创建了两个不同的管道模型,如下所示。

pipeline = Pipeline(stages = [assembler, slicer,pca, binarizer,assembler2, formula,classifier])
pipeline2 = Pipeline(stages = [assembler, slicer, binarizer,assembler2, formula,classifier])

但是当我使用以下代码 sn-p 生成 PMML 文件时,它会输出两个相同的文件。这意味着模型之间没有区别。我很迷惑。如果转换正确,生成的 PMML 文件应该会有所不同吧?

pipelineModel1 = pipeline.fit(df)
pmmlBytes = toPMMLBytes(spark, df, pipelineModel1)
with open('test.pmml','wb') as output:
output.write( pmmlBytes)

pipelineModel2 = pipeline2.fit(df)
pmmlBytes2 = toPMMLBytes(spark, df, pipelineModel2)
with open('test1.pmml','wb') as output:
output.write( pmmlBytes2)

【问题讨论】:

    标签: apache-spark pyspark apache-spark-mllib apache-spark-ml pmml


    【解决方案1】:

    如果转换正确,生成的 PMML 文件应该会有所不同吧?

    不一定。这完全取决于您的分类功能 - PCA 生成的列可能根本不包含在 PMML 文档中,因为它们不会“有助于”分离类。要检验这个假设,请尝试不同的分类函数,例如 DecisionTreeClassifierLogisticRegression

    此外,验证 PMML 文档是否正确的唯一方法是执行它,并根据原始 Apache Spark(ML) 结果验证其结果。

    【讨论】:

    • 我有一个问题。假设某些列对最后一个输出没有贡献。但是无论如何都应该完成对输入数据的预处理步骤?例如,如果我在预处理步骤中使用矢量切片等并将它们包含在我的管道中,那么这些信息应该在 PMML 中编码,因为它应该在预测时对传入数据应用相同的操作,不是吗?但是,为什么预处理步骤不同,却生成了相同的 PMML?
    • 对挖掘功能不使用的列进行预处理是没有意义的。这只是浪费了计算周期。
    猜你喜欢
    • 2020-12-20
    • 2019-06-23
    • 2018-10-28
    • 1970-01-01
    • 2017-12-24
    • 2017-06-23
    • 2021-01-26
    • 2018-10-31
    • 2022-10-23
    相关资源
    最近更新 更多