Когда использовать One Hot Encoding против LabelEncoder против DictVectorizor?


98

Я уже некоторое время строю модели с категориальными данными, и когда в этой ситуации я в основном по умолчанию использую функцию LabelEncoder scikit-learn для преобразования этих данных до построения модели.

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

Существуют ли определенные алгоритмы или ситуации, в которых один имеет преимущества / недостатки по сравнению с другими?


2
В отношении ответа AN6U5 и этого утверждения:> Тем не менее, существуют алгоритмы, такие как деревья решений и случайные леса, которые могут отлично работать с категориальными переменными, и LabelEncoder может использоваться для хранения значений, используя меньше дискового пространства. Не будет ли использование LabelEncoder преобразовывать категориальную в числовую функцию, что приведет к тому, что дерево решений выполнит разбиение при некотором значении, которое на самом деле не имеет смысла, поскольку сопоставление является произвольным?
Нико

1
Нико, я думаю, что говорит AN6U5 специально для деревьев решений, он работает нормально, потому что дерево будет разделено на собаку, кошку, мышь или 1,2,3, и значение "кошка" против "2" не важно для дерево (подумайте о том, как оно раскалывается). В случае чего-то вроде логистической регрессии значения являются частью уравнения, так как вы умножаете значения веса *, чтобы это могло вызвать проблемы с тренировкой и проблемы с весом, учитывая, что собака: 1 и кошка: 2 не имеют числового отношения 1 * 2 (хотя он все еще может работать с достаточным количеством обучающих примеров и эпох).
Даг Ф.

Ответы:


127

В некоторых случаях полезны LabelEncoder или DictVectorizor, но, на мой взгляд, они весьма ограничены из-за порядочности.

LabelEncoder может превратить [собака, кошка, собака, мышь, кошка] в [1,2,1,3,2], но тогда навязанная ординальность означает, что среднее значение для собаки и мыши - это кошка. Тем не менее, существуют алгоритмы, такие как деревья решений и случайные леса, которые могут отлично работать с категориальными переменными, и LabelEncoder можно использовать для хранения значений, используя меньше дискового пространства.

Преимущество One-Hot-Encoding заключается в том, что результат является двоичным, а не порядковым, и что все находится в ортогональном векторном пространстве. Недостаток в том, что для высокой мощности пространство функций может быстро взорваться, и вы начнете бороться с проклятием размерности. В этих случаях я обычно использую горячее кодирование с последующим PCA для уменьшения размерности. Я считаю, что разумная комбинация «горячий» плюс «PCA» редко может быть побеждена другими схемами кодирования. PCA обнаруживает линейное перекрытие, поэтому, естественно, будет стремиться сгруппировать аналогичные функции в одну и ту же функцию.


1
Большое спасибо - это очень полезно и имеет много смысла. Существуют ли какие-либо другие схемы кодирования, которые вы используете для конкретных / крайних случаев? Вы когда-нибудь находили, что вы будете использовать разные схемы кодирования для разных функций?
Антр

21

Хотя AN6U5 дал очень хороший ответ, я хотел добавить несколько моментов для дальнейшего использования. При рассмотрении One Hot Encoding (OHE) и Label Encoding , мы должны попытаться понять, какую модель вы пытаетесь построить. А именно, две категории моделей, которые мы будем рассматривать:

  1. Древовидные модели : деревья решений с градиентным ускорением и случайные леса.
  2. Модели , не основанные на деревьях: линейные, кНН или нейронные сети.

Давайте рассмотрим, когда применять OHE, а когда применять Label Encoding при построении моделей на основе дерева.

Мы применяем OHE, когда:

  1. Когда значения, которые близки друг к другу в кодировке метки, соответствуют целевым значениям, которые не являются близкими (нелинейные данные).
  2. Когда категориальная особенность не является порядковой (собака, кошка, мышь).

Мы применяем кодировку Label, когда:

  1. Категориальная особенность - порядковый номер (младший кг, старший кг, начальная школа, средняя школа и т. Д.).
  2. Когда мы можем придумать кодировщик меток, который назначает близкие метки аналогичным категориям : это приводит к меньшему количеству выпадений в локоне и, следовательно, сокращает время выполнения.
  3. Когда количество категориальных признаков в наборе данных огромно: одноразовое кодирование категориального признака с огромным количеством значений может привести к (1) высокому потреблению памяти и (2) случаю, когда некатегориальные особенности редко используются моделью. Вы можете иметь дело с 1-м случаем, если вы используете разреженные матрицы. Второй случай может возникнуть, если вы строите дерево, используя только подмножество функций. Например, если у вас есть 9 числовых функций и 1 категориальное с 100 уникальными значениями, и вы категорически закодировали эту категорическую функцию, вы получите 109 функций. Если дерево построено только с подмножеством объектов, начальные 9 числовых объектов будут использоваться редко. В этом случае вы можете увеличить параметр, управляющий размером этого подмножества. В xgboost это называется colsample_bytree, в случайном лесу sklearn max_features.

Если вы хотите продолжить с OHE, как предложено @ AN6U5, вы можете объединить PCA с OHE.

Давайте рассмотрим, когда применять OHE и Label Encoding при построении моделей, не основанных на деревьях.

Чтобы применить кодирование метки, зависимость между объектом и целью должна быть линейной, чтобы эффективно использовать кодирование метки.

Точно так же, если зависимость нелинейная, вы можете использовать OHE для нее.

Примечание: на некоторые объяснения ссылались из « Как выиграть в конкурсе Data Science» от Coursera.


Очень интуитивное объяснение. Разве это не должно быть "раскалывается", а не "разливается"?
Дзечу

0

LabelEncoder для порядковых данных, в то время как OHE для номинальных данных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.