Важной задачей при построении моделей машинного обучения является перевод факторных колонок в числа. Наиболее частым способом является one-hot энкодинг, о котором я рассказывал ранее. В случае большого количества категорий такой способ может привести к переобучению модели, поэтому рассматривают другие приемы. При этом прибегают как к использованию грубых путей как порядковое кодирование, так и попыткам ухватит дополнительную информацию, которую могут нести категории. В частности, ею может быть абсолютная или относительная частота встречаемости значений колонки. Для демонстрации работы частотного кодирования рассмотрим датафреймы:
Сначала создадим собственный преобразователь (о том, как подробнее рассказывал здесь):
Сначала вызовем fit_transform для обучения и преобразования df_train:
А теперь transform для преобразования df_valid:
Ниже привожу словарь с частотами категорий, сформированный в ходе обучения на df_train:
Теперь вызовем pipeline предобработки данных с нашим классом:
Следует отметить, что в библиотеке category_encoders с реализованными энкодерами, пока не включенными в sklearn, имеется рассматриваемый в данной статье frequency encoder, который называется CountEncoder. Конечно, его функционал шире, реализованного нами FreqEncoding (например, можно выбирать нормализуются ли частоты с параметром normalize, есть обработка Nan значений):
Как можно догадаться, CountEncoder также поддерживается в pipeline-ах: