Найти тему
Властелин машин

Частотное кодирование факторных колонок

Важной задачей при построении моделей машинного обучения является перевод факторных колонок в числа. Наиболее частым способом является one-hot энкодинг, о котором я рассказывал ранее. В случае большого количества категорий такой способ может привести к переобучению модели, поэтому рассматривают другие приемы. При этом прибегают как к использованию грубых путей как порядковое кодирование, так и попыткам ухватит дополнительную информацию, которую могут нести категории. В частности, ею может быть абсолютная или относительная частота встречаемости значений колонки. Для демонстрации работы частотного кодирования рассмотрим датафреймы:

Сначала создадим собственный преобразователь (о том, как подробнее рассказывал здесь):

Сначала вызовем fit_transform для обучения и преобразования df_train:

-2

А теперь transform для преобразования df_valid:

-3

Ниже привожу словарь с частотами категорий, сформированный в ходе обучения на df_train:

-4

Теперь вызовем pipeline предобработки данных с нашим классом:

-5

Следует отметить, что в библиотеке category_encoders с реализованными энкодерами, пока не включенными в sklearn, имеется рассматриваемый в данной статье frequency encoder, который называется CountEncoder. Конечно, его функционал шире, реализованного нами FreqEncoding (например, можно выбирать нормализуются ли частоты с параметром normalize, есть обработка Nan значений):

-6

Как можно догадаться, CountEncoder также поддерживается в pipeline-ах:

-7

-8