В наборе данных ~ 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).