2017-01-12 2 views
0

Для обработки новых и невидимых ярлыков в трубопроводе искрообразования я хочу использовать наиболее частое вменение. если трубопровод состоит из 3 шаговИсключительная медь трубопроводная рукоятка невидимые этикетки

  1. Предварительных обработка
  2. узнать наиболее частым товар
  3. stringIndexer для каждого столбца категориального
  4. вектора ассемблер
  5. оценки, например, случайный лес

Предполагая, что (1) и (2,3) и (4,5), представляют собой отдельные трубопроводы

  • можно установить и преобразовать 1 для железнодорожных и тестовых данных. Это означает, что все значения нан были обработаны, то есть начисленная
  • 2,3 будет соответствовать красиво, а также 4,5
  • то я могу использовать

следующие

val fittedLabels = pipeline23.stages collect { case a: StringIndexerModel => a } 
val result = categoricalColumns.zipWithIndex.foldLeft(validationData) { 
    (currentDF, colName) => 
     currentDF 
     .withColumn(colName._1, when(currentDF(colName._1) isin (fittedLabels(colName._2).labels: _*), currentDF(colName._1)) 
      .otherwise(lit(null))) 
    }.drop("replace") 

заменить новый/невидимые этикетки с null

  • Эти намеренно введенные нули вменяются наиболее часто используемыми imputer

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

Как я могу получить доступ к встроенным меткам внутри конвейера для сборки в Transformer, который обрабатывает установку новых значений в null?

Вы видите лучший подход для достижения новых значений? Я предполагаю, что наиболее частое вменение в порядке, то есть для набора данных с примерно 90 столбцами только очень мало столбцов будет содержать невидимую метку.

ответ

0

Наконец-то я понял, что эта функциональность требуется для правильной работы в конвейере, т. Е. Требует дополнительного нового компонента PipelineStage.

Смежные вопросы