Кодирование категориальных переменных, таких как "Имена состояний"

У меня есть категориальный столбец с именами состояний. Я не уверен, какой тип категориального кодирования мне нужно будет выполнить, чтобы преобразовать их в числовой тип.

Имеется 83 уникальных названия штатов.

Label Encoder используется для порядковых категориальных переменных, но OneHot увеличит количество столбцов, так как имеется 83 уникальных имени состояний.

Что еще я могу попробовать?

2 ответа

Решение

Я бы использовал Scikit OneHotEncoder (https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html) или Категориальный Encoder с кодировкой, установленной на 'onehot'. Он автоматически находит уникальные значения для каждой функции и преобразует их в один горячий вектор. Это увеличивает входную размерность для этой функции, но это необходимо, если вы занимаетесь каким-либо типом работы с данными. Если вы преобразуете функцию в порядковое целое число (т.е. только одно целое число), а не в вектор двоичных значений, алгоритм может сделать неверные выводы между двумя (возможно, полностью отдельными) категориальными значениями, которые просто оказываются близко друг к другу в категориальном пространстве..

Помимо одной горячей, существуют и другие мощные схемы кодирования, которые не увеличивают количество столбцов. Вы можете попробовать следующее (в порядке возрастания сложности):

  • count encoding: кодируйте каждую категорию по количеству раз, когда она встречается в данных, что полезно в некоторых случаях. Например, если вы хотите закодировать информацию о том, что Нью-Йорк - большой город, количество NY в данных действительно содержит эту информацию, поскольку мы ожидаем, что NY будет часто встречаться.

  • целевое кодирование: кодировать каждую категорию по среднему значению цели / результата (если цель непрерывна) в этой категории; или вероятностью попадания в цель, если она дискретна. Например, вы хотите закодировать район, что, очевидно, важно для прогнозирования цены на дом; определенно, вы можете заменить каждое название района средней ценой на дом в этом районе. Это невероятно улучшает прогноз (как показано в моем блокноте Kaggle для прогнозирования цен на жилье).

Есть и другие полезные схемы кодирования, такие как Catboost, вес доказательств и т. Д. Очень хорошо, что все эти схемы уже реализованы в библиотеке. categorical encoder здесь.

Другие вопросы по тегам