Menu
CoddyTech

Codificación one-hot

Parte de la sección Estadística para ML del Journey de Machine Learning de Coddy. Lección 53 de 64.

Los instrumentos no tienen un orden: si se numeran como 1, 2, 3, el piano contaría como superior a la batería. La codificación one-hot asigna a cada categoría su propia columna de 0/1:

Los instrumentos de cuatro alumnos, piano, batería, piano y violonchelo, se convierten en tres columnas llamadas violonchelo, batería y piano: cada fila tiene un único 1 en la columna de su instrumento y 0 en las demás, mientras que la columna de semanas se conserva

pd.get_dummies lo hace, y dtype=int solicita 1 y 0 en lugar de True y False:

pupils = pd.DataFrame({"instrument": ["piano", "drums", "piano", "cello"],
                       "weeks": [4, 3, 6, 10]})
encoded = pd.get_dummies(pupils, columns=["instrument"], dtype=int)
print(encoded)

Esto imprime:

   weeks  instrument_cello  instrument_drums  instrument_piano
0      4                 0                 0                 1
1      3                 0                 1                 0
2      6                 0                 0                 1
3     10                 1                 0                 0

Las nuevas columnas se añaden al final, una por cada valor en orden alfabético. El costo es el ancho: 500 valores diferentes añadirían 500 columnas.

challenge icon

Desafío

Intermedio

Un sitio de vacaciones muestra cabañas en cabins.csv. El programa lee el nombre de una columna, area o heat. El código inicial la convierte en números para correlacionarlos con el precio, pero ninguna de las dos columnas tiene un orden: esa r es inventada.

  1. Reemplaza sus líneas: codifica la columna con one-hot (0 y 1).
  2. Imprime en cuántas columnas se convirtió y, después, cada columna nueva con su recuento de 1.

Para cinco cabañas y la entrada heat:

heat became 2 columns:
heat_gas: 3 cabins
heat_wood: 2 cabins

Pruébalo tú mismo

import pandas as pd

cabins = pd.read_csv("cabins.csv")
column = input()

# Escribe tu código a continuación
# Estas líneas asignan números a las zonas y los tipos de calefacción, que no tienen un orden: reemplázalas
numbers = {"coast": 1, "hills": 2, "lake": 3, "woods": 4, "gas": 1, "solar": 2, "wood": 3}
cabins[column] = cabins[column].map(numbers)
print(f"{column} against price: r = {round(cabins[column].corr(cabins['price']), 2)}")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Estadística para ML

Practica por tu cuenta: Compilador de Python online