Estou construindo modelos com dados categóricos já há algum tempo e, nessa situação, basicamente uso como padrão a função LabelEncoder do scikit-learn para transformar esses dados antes de criar um modelo.
Eu entendo a diferença entre OHE
, LabelEncoder
e DictVectorizor
em termos do que eles estão fazendo para os dados, mas o que não está claro para mim é quando você pode optar por empregar uma técnica em detrimento de outro.
Existem certos algoritmos ou situações em que um tem vantagens / desvantagens em relação aos outros?
Respostas:
Existem alguns casos em que LabelEncoder ou DictVectorizor são úteis, mas na minha opinião são bastante limitados devido à ordinalidade.
LabelEncoder pode transformar [cachorro, gato, cachorro, rato, gato] em [1,2,1,3,2], mas a ordinalidade imposta significa que a média de cachorro e rato é gato. Ainda existem algoritmos, como árvores de decisão e florestas aleatórias, que podem funcionar muito bem com variáveis categóricas, e o LabelEncoder pode ser usado para armazenar valores usando menos espaço em disco.
A codificação One-Hot tem a vantagem de que o resultado é binário e não ordinal e que tudo fica em um espaço vetorial ortogonal. A desvantagem é que, para alta cardinalidade, o espaço de recursos pode explodir rapidamente e você começa a lutar com a maldição da dimensionalidade. Nesses casos, normalmente utilizo a codificação one-hot seguida pelo PCA para redução da dimensionalidade. Acho que a combinação criteriosa de PCA mais quente raramente pode ser superada por outros esquemas de codificação. O PCA encontra a sobreposição linear; portanto, tenderá naturalmente a agrupar recursos semelhantes no mesmo recurso.
fonte
Embora o AN6U5 tenha dado uma resposta muito boa, eu gostaria de acrescentar alguns pontos para referência futura. Ao considerar One Hot Encoding (OHE) e Label Encoding , devemos tentar entender qual modelo você está tentando construir. Nomeadamente, as duas categorias de modelo que consideraremos são:
Vamos considerar quando aplicar OHE e quando aplicar Label Encoding ao criar modelos baseados em árvore.
Aplicamos OHE quando:
Aplicamos a codificação de etiquetas quando:
Caso deseje continuar com o OHE, como sugerido por @ AN6U5, convém combinar o PCA com o OHE.
Vamos considerar quando aplicar a OHE e a codificação de etiquetas ao criar modelos não baseados em árvore.
Para aplicar a codificação de etiqueta, a dependência entre o recurso e o destino deve ser linear para que a codificação de etiqueta seja utilizada efetivamente.
Da mesma forma, caso a dependência seja não linear, convém usar o OHE para o mesmo.
Nota: Algumas das explicações foram mencionadas em Como vencer um concurso de ciência de dados da Coursera.
fonte
LabelEncoder é para dados ordinais, enquanto OHE é para dados nominais.
fonte