Menu
CoddyTech

Codifica one-hot

Fa parte della sezione Statistica per il machine learning del percorso Machine Learning di Coddy. Lezione 53 di 64.

Gli strumenti non hanno un ordine: se numerati 1, 2, 3, il pianoforte verrebbe considerato superiore alla batteria. La codifica one-hot assegna invece a ogni categoria una propria colonna con 0/1:

Gli strumenti di quattro alunni, pianoforte, batteria, pianoforte, violoncello, diventano tre colonne chiamate violoncello, batteria e pianoforte: ogni riga ha un solo 1 nella colonna del proprio strumento e 0 nelle altre, mentre la colonna delle settimane viene mantenuta

Se ne occupa pd.get_dummies, e dtype=int richiede 1 e 0 invece di 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)

Questo stampa:

   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

Le nuove colonne si aggiungono alla fine, una per ogni valore in ordine alfabetico. Il costo è l’ampiezza: 500 valori diversi aggiungerebbero 500 colonne.

challenge icon

Sfida

Medio

Un sito per le vacanze elenca delle baite in cabins.csv. Il programma legge il nome di una colonna, area oppure heat. Il codice iniziale la converte in numeri per correlare la colonna al prezzo, ma nessuna delle due colonne ha un ordine: quel valore r è inventato.

  1. Sostituisci le sue righe: codifica la colonna con one-hot encoding (0 e 1).
  2. Stampa in quante colonne si è trasformata, poi ogni nuova colonna con il suo conteggio di 1.

Per cinque baite e con l'input heat:

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

Provalo tu

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, aunque 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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Statistica per il machine learning

Esercitati da solo: Compilatore Python online