我按照Estimator
显示的模式为我自己的Python算法编写了一个自定义的ML Pipeline Transformer
和here。
然而,在该示例中,_transform()
所需的所有参数通过估计器的_fit()
方法方便地传递到模型/变换器中。但是我的变换器有几个参数来控制变换的应用方式。这些参数特定于变压器,因此事先将它们与用于拟合模型的估计器特定参数一起传递到估计器中会感觉很奇怪。
我可以通过向变压器添加额外的Params
来解决这个问题。当我在ML Pipeline之外使用我的估算器和变换器时,这很好用。但是,如果我的估算器对象已添加为管道的一个阶段,我该如何设置这些特定于变压器的参数?例如,你可以在getStages()
上调用pyspark.ml.pipeline.Pipeline
,因此可以获得估算器,但getStages()
上没有相应的PipelineModel
方法。我也看不到任何在PipelineModel
阶段设置参数的方法。
那么在我在拟合的管道模型上调用transform()
之前,如何在变换器上设置参数呢?我在Spark 2.2.0上。
在getStages()
上没有PipelineModel
方法,但同一类确实有一个叫做undocumented member的stages
。
例如,如果您刚刚安装了一个包含3个阶段的管道模型,并且您想在第二个阶段设置一些参数,那么您可以执行以下操作:
myModel = myPipelineModel.stages[1]
myModel.setMyParam(42)
# Or in one line:
#myPipelineModel.stages[1].setMyParam(42)
# Now we can push our data through the fully configured pipeline model:
resultsDF = myPipelineModel.transform(inputDF)