Pandas Более быстрый способ для одного горячего кодирования против pd.get_dummies - PullRequest
1 голос
/ 04 апреля 2020

Мне нужно одно горячее кодирование категориальных переменных в моем pandas фрейме данных.

Мой набор данных действительно большой, с более 2000 идентификаторами продуктов , чтобы быть одним горячим кодированием.

Я пробовал pd.get_dummies, и он всегда вылетает.

Я также попробовал OneHotEncoder от scikit-learn, который также дает сбой! (он отлично работает с меньшим подмножеством фрейма данных)

Какие есть еще методы? Каков наиболее эффективный способ горячего кодирования категориальных переменных для очень большого набора данных?

Мой фрейм данных:

Month   User    ProductID
1       A       ProdA
3       A       ProdB
11      A       ProdC
12      A       ProdD

Требуемый вывод:

Month   User    ProdA  ProdB  ProdC  ProdD
1       A       1      0      0      0
3       A       0      1      0      0
11      A       0      0      1      0
12      A       0      0      0      1

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Мой набор данных действительно большой с более чем 2000 идентификаторами продуктов и миллионами пользовательских строк.

Это приведет к огромному набору данных. Предположительно он падает из-за памяти.

Возможно, вам следует рассмотреть альтернативы полному кодированию в горячем режиме.

Один из способов - создать макеты верхних категорий, а для остальных - "другие".

tops = df.ProductID.value_counts().head(10)

даст вам лучшие идентификаторы продукта. Затем вы можете использовать

df.ProductID[~df.ProductID.isin(tops)] = 'other'

и создавать из него манекены.

Если у вас есть переменная ответа, вы можете альтернативно использовать означает кодировку .

0 голосов
/ 05 апреля 2020

Для функции с таким множеством возможных значений кодирование в одно касание может быть не лучшим вариантом.

Я предлагаю использовать Target Encoding (https://contrib.scikit-learn.org/categorical-encoding/). В отличие от однократного кодирования, которое создаст k столбцов для k уникальных значений объекта, целевое кодирование преобразует один объект в один столбец.

...