1

我正在使用Pyspark和JPMML库从我的管道模型生成PMML模型。但我认为它没有正确生成。为了测试这个,我使用相同的数据集和分类器创建了两个不同的流水线模型,如下所示。使用JPMML和Pyspark不能将管道转换为PMML

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

但是,当我使用下面的代码片段生成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) 

回答

1

,如果它的正确转换权的产生PMML文件应该是不同的?

不一定。这一切都取决于您的分类功能 - 可能发生的情况是,PCA生成的列没有包含在PMML文档中,因为它们不会“分离”这些类。为了测试这个假设,尝试不同的分类函数,如DecisionTreeClassifierLogisticRegression

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

+0

我有问题。假设有些列不会对最后的输出做出贡献。但是输入数据的预处理步骤应该完成,不管对吗?例如,如果我在预处理步骤中使用矢量切片等,并将它们包含在我的管线中,那么这些信息应该在PMML中进行编码,因为在预测时应该对传入数据应用相同的操作。但是,尽管预处理步骤不同,但是如何生成相同的PMML? – SameeraR

+0

对采矿功能未使用的列进行预处理没有意义。这只是浪费了计算周期。 – user1808924

相关问题