Приводит ли использование paramGrid с TrainValidationSplit к тому, что каждый раз запускается весь конвейер или только тот шаг, который необходимо оптимизировать?

#python #pyspark #databricks #azure-databricks

Вопрос:

Я использую PySpark в базах данных Azure. У меня есть конвейер со строковыми индексаторами, онехотенкодерами, сборщиком векторов и LinearSVC:

 pipeline = Pipeline(stages=["stringvar1_indexer", "stringvar2_indexer", "stringvar2_encoder", "assembler", "svc"])  

Чтобы найти оптимальные параметры для SVC, я использую сетку параметров для итерации параметра регуляризации и максимальных итераций:

 paramGrid = ParamGridBuilder()   .addGrid(svc.regParam, [.1, .001, .0001])   .addGrid(svc.maxIter, [5, 10, 15])   .build()  

Затем я поместил его в раздел TrainValidationSplit, чтобы запустить SVC в сетке параметров:

 tvs = TrainValidationSplit(estimator=pipeline,  estimatorParamMaps=paramGrid,  evaluator=BinaryClassificationEvaluator(),  trainRatio=0.8)  

Когда я запускаю модель tvs.fit(train) , я думаю, что она каждый раз запускает весь конвейер индексатора, кодировщика, ассемблера, даже если они не меняются между запусками параметров SVC. Три вопроса:

  1. Работает ли он каждый раз по всему конвейеру?
  2. Если да, то есть ли у меня способ кэшировать конвейер, не связанный с svc, чтобы он не запускался каждый раз?
  3. Я использую onnx для переносимости модели, что означает, что мне нужно запустить весь конвейер вместе, чтобы правильно сохранить модель (onnx не будет принимать входные данные vectorUDT, когда я попробовал это отдельно на более ранней итерации). Если мне придется разделить конвейер, можете ли вы придумать способ сохранить onnx, чтобы он принимал векторные входные данные?