2

我有个问题。我正在尝试将 PySpark ML 模型序列化为 mleap。但是,该模型使用 SQLTransformer 来执行一些基于列的转换,例如添加某些列的日志缩放版本。众所周知,Mleap 不支持 SQLTransformer - 请参见此处: https ://github.com/combust/mleap/issues/126 所以我已经实现了这两个建议中的前者:

  • 对于非行操作,将 SQL 移出您计划序列化的 ML 管道
  • 对于基于行的操作,使用可用的 ML 转换器或编写自定义转换器 <- 这是自定义转换器文档将提供帮助的地方。

我已经对用于构建模型的训练数据进行了外部化 SQL 转换,并且在运行模型进行评估时对输入数据执行了相同的操作。

我遇到的问题是我无法在 2 个模型中获得相同的结果。模型 1 - Pure Spark ML 模型包含

SQLTransformer + later transformations : StringIndexer -> 
OneHotEncoderEstimator -> VectorAssembler -> RandomForestClassifier

模型 2 - 具有 SQL 查询的外部化版本在构建模型时在训练数据上运行。转换是模型 1 中 SQLTransformer 之后的所有内容:

 StringIndexer -> OneHotEncoderEstimator -> 
 VectorAssembler -> RandomForestClassifier

我想知道如何去调试这个问题。有没有办法在每个阶段之后以某种方式比较结果以查看差异出现在哪里?任何建议表示赞赏。

4

0 回答 0