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

相關問題