#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. Три вопроса:
- Работает ли он каждый раз по всему конвейеру?
- Если да, то есть ли у меня способ кэшировать конвейер, не связанный с svc, чтобы он не запускался каждый раз?
- Я использую onnx для переносимости модели, что означает, что мне нужно запустить весь конвейер вместе, чтобы правильно сохранить модель (onnx не будет принимать входные данные vectorUDT, когда я попробовал это отдельно на более ранней итерации). Если мне придется разделить конвейер, можете ли вы придумать способ сохранить onnx, чтобы он принимал векторные входные данные?