Я уже некоторое время строю модели с категориальными данными, и когда в этой ситуации я в основном по умолчанию использую функцию LabelEncoder scikit-learn для преобразования этих данных до построения модели.
Я понимаю разницу между OHE
, LabelEncoder
и DictVectorizor
с точки зрения того, что они делают , чтобы данные, но то , что мне не ясно, когда вы можете выбрать использовать одну технику над другой.
Существуют ли определенные алгоритмы или ситуации, в которых один имеет преимущества / недостатки по сравнению с другими?
Ответы:
В некоторых случаях полезны LabelEncoder или DictVectorizor, но, на мой взгляд, они весьма ограничены из-за порядочности.
LabelEncoder может превратить [собака, кошка, собака, мышь, кошка] в [1,2,1,3,2], но тогда навязанная ординальность означает, что среднее значение для собаки и мыши - это кошка. Тем не менее, существуют алгоритмы, такие как деревья решений и случайные леса, которые могут отлично работать с категориальными переменными, и LabelEncoder можно использовать для хранения значений, используя меньше дискового пространства.
Преимущество One-Hot-Encoding заключается в том, что результат является двоичным, а не порядковым, и что все находится в ортогональном векторном пространстве. Недостаток в том, что для высокой мощности пространство функций может быстро взорваться, и вы начнете бороться с проклятием размерности. В этих случаях я обычно использую горячее кодирование с последующим PCA для уменьшения размерности. Я считаю, что разумная комбинация «горячий» плюс «PCA» редко может быть побеждена другими схемами кодирования. PCA обнаруживает линейное перекрытие, поэтому, естественно, будет стремиться сгруппировать аналогичные функции в одну и ту же функцию.
источник
Хотя AN6U5 дал очень хороший ответ, я хотел добавить несколько моментов для дальнейшего использования. При рассмотрении One Hot Encoding (OHE) и Label Encoding , мы должны попытаться понять, какую модель вы пытаетесь построить. А именно, две категории моделей, которые мы будем рассматривать:
Давайте рассмотрим, когда применять OHE, а когда применять Label Encoding при построении моделей на основе дерева.
Мы применяем OHE, когда:
Мы применяем кодировку Label, когда:
Если вы хотите продолжить с OHE, как предложено @ AN6U5, вы можете объединить PCA с OHE.
Давайте рассмотрим, когда применять OHE и Label Encoding при построении моделей, не основанных на деревьях.
Чтобы применить кодирование метки, зависимость между объектом и целью должна быть линейной, чтобы эффективно использовать кодирование метки.
Точно так же, если зависимость нелинейная, вы можете использовать OHE для нее.
Примечание: на некоторые объяснения ссылались из « Как выиграть в конкурсе Data Science» от Coursera.
источник
LabelEncoder для порядковых данных, в то время как OHE для номинальных данных.
источник