Категориальные признаки отличаются от числовых признаков тем, что категориальные признаки представляют собой набор дискретных значений, в то время как числовые признаки образуют непрерывную последовательность.Например, для функции «животное», если 1 -> кошка и 2 -> собака, у вас не может быть 1,5, вы либо 1, либо 2. И в этой настройке собака не обязательно больше, чем кошка - однаи два являются просто кодировками «реальной» особенности.
С другой стороны, для функции "цена" у вас есть большой диапазон возможных значений, и есть четкое определение того, какие значения больше, чем другие значения.
В терминахимея дело с категориальными функциями, вы на месте - мы их кодируем.Например, sklearn.preprocessing
имеет OrdinalEncoder
, который просто преобразует категориальные признаки (в основном строки типа «мужской», «женский» и т. Д.) В целые числа.
Теперь я неслишком хорошо знаком со sklearn и какими типами кодирования это требуется, но я чувствую, что должен обсудить некоторые более «продвинутые» способы кодирования категориальных функций.В зависимости от того, какие модели машинного обучения вы используете, они могут применяться или не применяться.Лично я в первую очередь использую их для нейронных сетей.
Более простой способ - это горячее кодирование, которое похоже на кодирование каждой категории в целое число по умолчанию.За исключением этого времени, чтобы избавиться от проблемы, когда модель рассматривает одну категорию как большую, чем другую, она использует массив единиц и нулей.то есть "кошка" -> 0 -> [1, 0, 0], "собака" -> 1-> [0, 1, 0], "птица" -> 2 -> [0, 0, 1].По сути, каждая категория кодируется в целочисленный индекс, а ваш результат - это массив всех нулей, кроме единицы с этим индексом.
Другой способ, которым мы кодируем, - это использование Embeddings.Это очень похоже на одноразовое кодирование в том смысле, что вы преобразуете целочисленный индекс (для категории) в n-мерный вектор.Однако это экономит место в том, что размер вектора может быть меньше, чем количество категорий.Это обычно используется в нейронных сетях, которые обрабатывают семантическую информацию.Каждое слово передается в модель как целочисленный индекс, но слой Embedded преобразует каждый индекс в n-мерный вектор.По мере обучения модели слой «Внедрение» будет лучше и лучше представлять каждую категорию.