Используйте сохраненную модель для преобразования других данных без повторной подгонки. Spark - PullRequest
0 голосов
/ 08 ноября 2019

Я использую Spark (ядро и Mllib) версии 2.2.0 с Scala.

Я успешно сохранил модель CrossValidator с логистической регрессией. Ниже приведен код, который я использовал

  val cv = new CrossValidator()
    .setEstimator(lr)
    .setEvaluator(new BinaryClassificationEvaluator)
    .setEstimatorParamMaps(paramGrid)
    .setNumFolds(5)

  val model = cv.fit(trainingData)

  model.write.overwrite().save("./cvmodel")

После этого я пытаюсь использовать его для другого набора данных с кодом ниже

  val model = CrossValidatorModel.read.load("./cvmodel")

  val cleanData = DataApi.cleanData(dataset, spark) // custom method

  val preparedData = DataApi.oneHotEncodingData(cleanData).select("label","features") // custom method

  val predict_dataset = model.transform(preparedData)

  printResult(predict_dataset) // A custom method that uses metrics to print the statistics
                               // of the result

Однако при использовании наборов данных разных размеровпо сравнению с тестовыми данными (более или менее), я получаю эту ошибку

java.lang.IllegalArgumentException: requirement failed: BLAS.dot(x: Vector, y:Vector) was given Vectors with non-matching sizes: x.size = 1178, y.size = 9921

Код фактически работает с набором данных того же размера. Поэтому я хотел бы знать, возможно ли использовать сохраненную модель с другим набором данных другого размера без необходимости повторного подгонки. Если это так, я хотел бы знать, как.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 11 ноября 2019

Я действительно нашел причину этой ошибки. Во время моего горячего завершения процесса я фактически использовал несколько конвейеров, которые я не сохранял, как мой CrossValidatorModel. Что мне нужно было сделать:

  1. Смонтируйте один конвейер горячего кодирования с моим набором обучающих данных и сохраните их как модели
  2. Смонтируйте мой CrossValidator с моим обучающим набором данных и сохраните его как модель
  3. Загрузите мои модели конвейера горячего кодирования и преобразуйте мой тестовый набор данных
  4. Загрузите мой CrossValidatorModel и преобразуйте мой тестовый набор данных

При этом у меня больше не было проблем.

...