如果自定义PySpark变换器是适合的ML管道中的一个阶段,如何设置它们的参数?

问题描述 投票:0回答:1

我按照Estimator显示的模式为我自己的Python算法编写了一个自定义的ML Pipeline Transformerhere

然而,在该示例中,_transform()所需的所有参数通过估计器的_fit()方法方便地传递到模型/变换器中。但是我的变换器有几个参数来控制变换的应用方式。这些参数特定于变压器,因此事先将它们与用于拟合模型的估计器特定参数一起传递到估计器中会感觉很奇怪。

我可以通过向变压器添加额外的Params来解决这个问题。当我在ML Pipeline之外使用我的估算器和变换器时,这很好用。但是,如果我的估算器对象已添加为管道的一个阶段,我该如何设置这些特定于变压器的参数?例如,你可以在getStages()上调用pyspark.ml.pipeline.Pipeline,因此可以获得估算器,但getStages()上没有相应的PipelineModel方法。我也看不到任何在PipelineModel阶段设置参数的方法。

那么在我在拟合的管道模型上调用transform()之前,如何在变换器上设置参数呢?我在Spark 2.2.0上。

apache-spark pyspark apache-spark-ml
1个回答
1
投票

getStages()上没有PipelineModel方法,但同一类确实有一个叫做undocumented memberstages

例如,如果您刚刚安装了一个包含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)
© www.soinside.com 2019 - 2024. All rights reserved.