Если у меня уже есть столбец, созданный OneHotEncoderEstimator, как я могу отбросить один из уровней на лету?
Скажем, у вас есть столбец с 4 уровнями (один отброшен для зависимости), и вы хотите отбросить 2-й уровень (т. Е. Поместить его в перехват).
Итак, чтобы перейти от чего-то вроде
row, fruit , encoded
1 , apple , [1, 0, 0]
2 , orange, [0, 1 ,0]
3 , pear , [0, 0, 1]
до
row, fruit , encoded
1 , apple , [1, 0]
2 , orange, [0, 1]
3 , pear , [0, 0]
Одна из проблем заключается в том, что OneHotEncoderEstimator возвращает SparseVector для каждой строки.Я даже не уверен, как отбросить «правильный» индекс вектора, так как все, что у меня есть, это имя столбца и уровень.
Я знаю, что могу просто удалить строки и перекодировать, но я »Я пытаюсь избежать этого.
Кто-нибудь знает, как это сделать в Python / Spark 2.3?
РЕДАКТИРОВАТЬ
Поэтому я хотел уточнить, что«закодированный» столбец представляет собой разреженную матрицу (или, альтернативно, столбец объектов SparseVector).
См .: https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.mllib.linalg.SparseVector
Некоторые ответы здесь обсуждают различия между разреженными и плотными векторами в Spark:
Разреженный вектор против плотного вектора