Кодирование категориальной переменной из нескольких столбцов панд - PullRequest
0 голосов
/ 07 февраля 2019

В наборе данных ~ 1 миллион строк с в основном логическими функциями у меня есть 15 столбцов строковых данных, которые я хочу кодировать таким образом, чтобы распознавать взаимодействие между ними.Таким образом, данные выглядят примерно так:

Name1 Name2 Name3 ...
Jane  John  Julie ...
John  Julie Peter ...

Одно и то же имя может появляться в любом из столбцов, но имена всегда располагаются в алфавитном порядке по столбцам.Прямо сейчас я переформирую данные в «длинный» формат.Это позволяет алгоритмам машинного обучения распознавать, что, например, Джеймс всегда является Джеймсом, независимо от того, в каком столбце он начал, но теряет эффекты взаимодействия.

df = (pd.wide_to_long(df, 
                      stubnames = stubs,
                      i = i,
                      j = j)
        .reset_index()) 

Фиктивное кодирование имеет аналогичную проблему (и являетсянемного громоздко, потому что у меня тысячи имен).

Если оставить его в широком формате и кодировать каждый столбец по отдельности, пропускается, что один и тот же человек находится в разных столбцах (так как он хранится в отдельных категориальных переменных).Таким образом, эффекты взаимодействия приглушены / искажены в этом сценарии (поскольку Джеймс, взаимодействующий с Джули, отличается, если Анна или Захари тоже с ними).То, что я действительно хочу сделать, это закодировать различные комбинации имен в этих столбцах как одну категориальную особенность.

Для чего бы то ни было, я также использую пакет category_encoders в конвейере для других переменных и в основном готовлю данныедля методов дерева (Random Forest) и ансамбля (xgboost).

...