Падение уровня из колонки с горячим кодированием в Spark - PullRequest
0 голосов
/ 16 декабря 2018

Если у меня уже есть столбец, созданный 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:

Разреженный вектор против плотного вектора

...