Для обработки новых и невидимых ярлыков в трубопроводе искрообразования я хочу использовать наиболее частое вменение. если трубопровод состоит из 3 шаговИсключительная медь трубопроводная рукоятка невидимые этикетки
- Предварительных обработка
- узнать наиболее частым товар
- stringIndexer для каждого столбца категориального
- вектора ассемблер
- оценки, например, случайный лес
Предполагая, что (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 столбцами только очень мало столбцов будет содержать невидимую метку.