paint-brush
¿Qué es One Hot Encoding? ¿Por qué y cuándo tienes que usarlo?por@rakshithvasudev
448,983 lecturas
448,983 lecturas

¿Qué es One Hot Encoding? ¿Por qué y cuándo tienes que usarlo?

por Vasudev3m2017/08/03
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow
ES

Demasiado Largo; Para Leer

One Hot Encoding es un proceso mediante el cual las variables categóricas se convierten en una forma que podría proporcionarse a los algoritmos de ML para hacer un mejor trabajo en la predicción. El valor categórico representa el valor numérico de la entrada en el conjunto de datos. Esta forma de organización presupone es VW > Acura > Honda en base a los valores categóricos. Esta es la razón por la que un codificador en caliente realiza la "binarización" de la función para entrenar el modelo para incluirlo como una categoría. Una codificación en caliente convierte la característica 'narciso' y 'rosa' de 'flor' en tres características.
featured image - ¿Qué es One Hot Encoding? ¿Por qué y cuándo tienes que usarlo?
Vasudev HackerNoon profile picture

Una codificación en caliente es un proceso mediante el cual las variables categóricas se convierten en una forma que podría proporcionarse a los algoritmos de ML para hacer un mejor trabajo en la predicción.

Entonces, está jugando con modelos ML y encuentra este término "Una codificación en caliente" por todas partes. Verá ladocumentación de sklearn para un codificador en caliente y dice "Codificar características de enteros categóricos usando un esquema one-hot aka one-of-K". No está tan claro, ¿verdad? O al menos no lo era para mí. Entonces, veamos qué es realmente una codificación en caliente.

Supongamos que el conjunto de datos es el siguiente:

 ╔════════════╦═════════════════╦════════╗ ║ CompanyName Categoricalvalue ║ Price ║ ╠════════════╬═════════════════╣════════║ ║ VW ╬ 120000 ║ ║ Acura ╬ 210011 ║ ║ Honda ╬ 350000 ║ ║ Honda ╬ 310000 ║ ╚════════════╩═════════════════╩════════╝

onehot-dataset alojado con ❤ por GitHub

El valor categórico representa el valor numérico de la entrada en el conjunto de datos. Por ejemplo: si hubiera otra empresa en el conjunto de datos, se le habría dado un valor categórico de 4. A medida que aumenta el número de entradas únicas, los valores categóricos también aumentan proporcionalmente.

La tabla anterior es solo una representación. En realidad, los valores categóricos comienzan desde 0 hasta las categorías N-1.

Como probablemente ya sepa, la asignación de valores categóricos se puede realizar mediante LabelEncoder de sklearn .

Ahora volvamos a una codificación en caliente: supongamos que seguimos las instrucciones que se dan en ladocumentación de sklearn para una codificación en caliente y la seguimos con un poco de limpieza, terminamos con lo siguiente:

 ╔════╦══════╦══════╦════════╦ ║ VW ║ Acura║ Honda║ Price ║ ╠════╬══════╬══════╬════════╬ ║ 10020000 ║ ║ 01010011 ║ ║ 00150000 ║ ║ 00110000 ║ ╚════╩══════╩══════╩════════╝

Después de una codificación en caliente alojada con ❤ por GitHub

0 indica inexistente mientras que 1 indica existente.

Antes de continuar, ¿podría pensar en una razón por la cual la codificación de etiquetas no es suficiente para proporcionar al modelo el entrenamiento? ¿Por qué necesita una codificación en caliente?

El problema con la codificación de etiquetas es que asume un valor categórico más alto, una categoría mejor. "¿¡Esperar lo!?".

Me explico: lo que presupone esta forma de organización es VW > Acura > Honda en base a los valores categóricos. Digamos que suponiendo que su modelo calcula internamente el promedio, en consecuencia obtenemos, 1+3 = 4/2 =2. Esto implica que: Promedio de VW y Honda es Acura. Esta es definitivamente una receta para el desastre. La predicción de este modelo tendría muchos errores.

Es por eso que usamos un codificador en caliente para realizar la "binarización" de la categoría y lo incluimos como una función para entrenar el modelo.

Otro ejemplo: supongamos que tiene la función 'flor' que puede tomar los valores 'narciso', 'lirio' y 'rosa'. Una codificación en caliente convierte la característica 'flor' en tres características, 'is_daffodil', 'is_lily' y 'is_rose', que son todas binarias.

Una codificación en caliente explicada en una imagen

Imagen principal a través de https://i.stack.imgur.com/mfsNd.png