¿Qué es la codificación one-hot?
La codificación one-hot es un paso de preprocesamiento de datos que se utiliza para convertir valores categóricos en representaciones numéricas compatibles.
columna_categorica | bool_col | col_1 | col_2 | etiqueta |
---|---|---|---|---|
valor_A | Verdadero | 9 | 4 | 0 |
valor_B | FALSO | 7 | 2 | 0 |
valorado | Verdadero | 9 | 5 | 0 |
valorado | FALSO | 8 | 3 | 1 |
valorado | FALSO | 9 | 0 | 1 |
valorado | FALSO | 5 | 4 | 1 |
valor_B | Verdadero | 8 | 1 | 1 |
valorado | Verdadero | 6 | 6 | 1 |
valor_C | Verdadero | 0 | 5 | 0 |
Por ejemplo, en este conjunto de datos ficticio, la columna categórica tiene varios valores de cadena. Muchos algoritmos de aprendizaje automático requieren que los datos de entrada estén en forma numérica, por lo que se necesita alguna forma de convertir este atributo de datos en una forma compatible con dichos algoritmos. Este artículo divide una columna categórica en múltiples columnas de valores binarios.
Codificación one-hot usando la biblioteca Pandas
Primero, lea .csv
el archivo o cualquier otro archivo relevante en un marco de datos de Pandas.
df = pd.read_csv("data.csv")
Para comprobar valores únicos y comprender mejor los datos, puede utilizar las siguientes funciones de Panda.
df['categorical_column'].nunique()
df['categorical_column'].unique()
Para estos datos ficticios, la función devuelve el siguiente resultado:
>>> 4
>>> array(['value_A', 'value_C', 'value_D', 'value_B'], dtype=object)
Para una columna categórica, se puede dividir en varias columnas, para lo cual este artículo utiliza pandas.get_dummies()
el método. Requiere los siguientes parámetros:
parámetro | |
---|---|
datos: similar a matriz, serie o marco de datos | Objeto de marco de datos sin formato de Pandas |
columnas: similar a una lista, el valor predeterminado es Ninguno | Lista de columnas categóricas que se codificarán en caliente |
drop_first: valor booleano, el valor predeterminado es falso | Eliminar el primer nivel de etiquetas de categorías |
Para comprender mejor esta función, realicemos una codificación one-hot en este conjunto de datos ficticio.
- Codificación one-hot de columnas categóricas
Usamos get_dummies
el método y tomamos el marco de datos original como entrada de datos, en columns
el que pasamos una categorical_column
lista que contiene solo los encabezados.
df_encoded = pd.get_dummies(df, columns=['categorical_column', ])
El siguiente comando elimina categorical_column
y crea una nueva columna para cada valor único. Entonces, una sola columna categórica se convierte en 4 columnas nuevas en las que solo una columna tiene el valor 1 y otras 3 columnas tienen el valor 0, por eso se llama codificación activa.
valor_columna_categorial_A | valor_columna_categorial_B | valor_columna_categorica_C | valor_columna_categorial_D |
---|---|---|---|
1 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 |
0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 |
El problema surge cuando uno quiere codificar en caliente una columna booleana, lo que crea dos columnas nuevas.
- Codificación one-hot de columnas binarias
df_encoded = pd.get_dummies(df, columns=[bool_col, ])
bool_col_False | bool_col_True |
---|---|
0 | 1 |
1 | 0 |
0 | 1 |
1 | 0 |
En lugar de tener que agregar una columna, puede tener solo una columna True
codificada como 1
y False
codificada como 0
. Para resolver este problema, drop_first
se pueden utilizar parámetros.
df_encoded = pd.get_dummies(df, columns=['bool_col'], drop_first=True)
bool_col_True |
---|
1 |
0 |
1 |
0 |
en conclusión
Se realiza una codificación one-hot en el conjunto de datos virtuales y el resultado final es el siguiente:
col_1 | col_2 | booleano | A | B | C | D | etiqueta |
---|---|---|---|---|---|---|---|
9 | 4 | 1 | 1 | 0 | 0 | 0 | 0 |
7 | 2 | 0 | 0 | 1 | 0 | 0 | 0 |
9 | 5 | 1 | 0 | 0 | 0 | 1 | 0 |
8 | 3 | 0 | 0 | 0 | 0 | 1 | 1 |
9 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
5 | 4 | 0 | 0 | 0 | 0 | 1 | 1 |
8 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
6 | 6 | 1 | 0 | 0 | 0 | 1 | 1 |
0 | 5 | 1 | 0 | 0 | 1 | 0 | 0 |
1 | 8 | 1 | 0 | 0 | 0 | 1 | 0 |
Los valores categóricos y booleanos se convierten en valores numéricos que pueden usarse como entrada para algoritmos de aprendizaje automático.