Para usar SVM o red neuronal, necesita transformar (codificar) variables categóricas en variables numéricas, el método normal en este caso es usar valores binarios 0-1 con el k-ésimo valor categórico transformado para ser (0,0, .. ., 1,0, ... 0) (1 está en la posición k-ésima). ¿Hay otros métodos para hacer esto, especialmente cuando hay una gran cantidad de valores categóricos (por ejemplo, 10000) de modo que la representación 0-1 introducirá una gran cantidad de dimensiones adicionales (unidades de entrada) en la Red Neural que parece no ser lo suficientemente deseada o esperada? ?
Estoy preguntando sobre estrategias generales.
Respuestas:
En PNL, donde las palabras se codifican típicamente como 1-de-k, el uso de incrustaciones de palabras ha surgido recientemente. La página de wikipedia con sus referencias es un buen comienzo.
La idea general es aprender una representación vectorial para cada palabra donde palabras semánticamente similares están cercanas en ese espacio. En consecuencia, las entradas son de tamaño lugar del tamaño del vocabulario.Xyo∈ Rnorte yo norte
Tal vez pueda transferir esa idea a su entorno.
fuente
Los métodos 'estándar' son: codificación de uno en caliente (que mencionó en la pregunta). Si hay demasiadas categorías posibles, pero necesita codificación 0-1, puede usar el truco de hashing .
El otro método usado con frecuencia es promediar la respuesta sobre la categoría: ver la imagen del comentario en kaggle .
fuente
Puede usar
dummyVars
en R, desde elcaret
paquete. Creará automáticamente diferentes columnas según el número de niveles. Después, puede usarlocbind
y adjuntarlo a sus datos originales. Otras opciones incluyenmodel.matrix
ysparse.model.matrix
.fuente
Puede probar la codificación binaria, que es más compacta y, a veces, supera a uno en caliente. Puede implementar la incrustación categórica en Keras, por ejemplo.
fuente
"Incorporaciones de entidades de variables categóricas" por Cheng Guo, Felix Berkhahn
fuente