Spark K-fold Cross Validation

У меня возникли некоторые проблемы с пониманием проверки искры. Любой пример, который я видел, использует его для настройки параметров, но я предполагал, что он также будет выполнять обычную перекрестную проверку в K-кратном размере?

Что я хочу сделать, так это выполнить перекрестную проверку в k-кратном порядке, где k = 5. Я хочу получить точность для каждого результата, а затем получить среднюю точность. В scikit выучите, как это будет сделано, где результаты будут давать вам результат для каждого фолда, а затем вы можете использовать scores.mean()

scores = cross_val_score(classifier, y, x, cv=5, scoring='accuracy')

Вот как я делаю это в Spark, paramGridBuilder пуст, так как я не хочу вводить какие-либо параметры.

val paramGrid = new ParamGridBuilder().build()
val evaluator = new MulticlassClassificationEvaluator()
  evaluator.setLabelCol("label")
  evaluator.setPredictionCol("prediction")
evaluator.setMetricName("precision")


val crossval = new CrossValidator()
crossval.setEstimator(classifier)
crossval.setEvaluator(evaluator) 
crossval.setEstimatorParamMaps(paramGrid)
crossval.setNumFolds(5)


val modelCV = crossval.fit(df4)
val chk = modelCV.avgMetrics

Делает ли это то же самое, что и реализация Scikit Learn? Почему в примерах используются данные обучения/тестирования при перекрестной проверке?

Как провести перекрестную проверку модели RandomForest?

https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/ml/ModelSelectionViaCrossValidationExample.scala

Ответ 1

  • То, что вы делаете, выглядит нормально.
  • В принципе, да, он работает так же, как sklearn поиск сетки CV.
    Для каждого EstimatorParamMaps (набор параметров) алгоритм проверяется с CV, поэтому avgMetrics является средней метрикой точности перекрестной проверки /s для всех складок. В случае, если один использует пустой ParamGridBuilder (без поиска параметров), ему нравится иметь "регулярную" перекрестную проверку ", и мы получим одну перекрестно подтвержденную точность обучения.
  • Каждая итерация CV включает в себя K-1 тренировочные сгибы и 1 тестовую сгиб, поэтому почему большинство примеров разделяют данные на данные обучения/тестирования перед выполнением перекрестной проверки? потому что тестовые складки внутри CV используются для поиска сетки params. Это означает, что для выбора модели необходим дополнительный набор данных проверки. Итак, для оценки конечной модели требуется так называемый "тестовый набор данных". Подробнее здесь