Menu
CoddyTech

Codificação One-Hot

Parte da seção Estatística para ML do Journey de Machine Learning da Coddy. Lição 53 de 64.

Os instrumentos não têm uma ordem: numerados como 1, 2, 3, o piano seria considerado maior que a bateria. A codificação one-hot dá a cada categoria sua própria coluna de 0/1:

Os instrumentos de quatro alunos, piano, bateria, piano, violoncelo, tornam-se três colunas chamadas violoncelo, bateria e piano: cada linha tem um único 1 na coluna do instrumento e 0 nas outras, enquanto a coluna de semanas é mantida

pd.get_dummies faz isso, e dtype=int solicita 1 e 0 em vez de True e 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)

Isso 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

As novas colunas são adicionadas ao final, uma para cada valor em ordem alfabética. O custo é a largura: 500 valores diferentes adicionariam 500 colunas.

challenge icon

Desafio

Médio

Um site de férias lista cabanas em cabins.csv. O programa lê o nome de uma coluna, area ou heat. O código inicial atribui números a ela para correlacioná-la com o preço, mas nenhuma das colunas tem uma ordem: esse r é inventado.

  1. Substitua suas linhas: codifique a coluna em one-hot (0 e 1).
  2. Imprima quantas colunas ela se tornou e, em seguida, cada nova coluna com sua contagem de 1s.

Para cinco cabanas e a entrada heat:

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

Experimente você mesmo

import pandas as pd

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

# Escreva seu código abaixo
# Estas linhas atribuem números às áreas e aos tipos de aquecimento, criando uma ordem que eles não têm: substitua-as
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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Estatística para ML

Pratique por conta própria: Compilador de Python online