Menu
CoddyTech

Encodage one-hot

Fait partie de la section Statistiques pour le ML du Journey Machine Learning de Coddy. Leçon 53 sur 64.

Les instruments n’ont pas d’ordre : numérotés 1, 2, 3, le piano serait considéré comme supérieur à la batterie. L’encodage one-hot attribue plutôt à chaque catégorie sa propre colonne de 0/1 :

Les instruments de quatre élèves, piano, batterie, piano, violoncelle, deviennent trois colonnes nommées violoncelle, batterie et piano : chaque ligne comporte un seul 1 dans la colonne de son instrument, et des 0 dans les autres, tandis que la colonne des semaines est conservée telle quelle

pd.get_dummies s’en charge, et dtype=int demande des 1 et des 0 au lieu de True et 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)

Ceci affiche :

   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

Les nouvelles colonnes s'ajoutent à la fin, une par valeur dans l'ordre alphabétique. Le coût est la largeur : 500 valeurs différentes ajouteraient 500 colonnes.

challenge icon

Défi

Moyen

Un site de vacances répertorie des cabanes dans cabins.csv. Le programme lit un nom de colonne, area ou heat. Le code de départ lui attribue des nombres pour établir une corrélation avec le prix, mais aucune des deux colonnes n’a d’ordre : cette corrélation est artificielle.

  1. Remplace ses lignes : encode la colonne en one-hot (0 et 1).
  2. Affiche le nombre de colonnes obtenues, puis chaque nouvelle colonne avec son nombre de 1.

Pour cinq cabanes et l’entrée heat :

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

Essayez vous-même

import pandas as pd

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

# Écrivez votre code ci-dessous
# Ces lignes attribuent des numéros aux zones et aux types de chauffage, alors qu’ils n’ont pas d’ordre naturel : remplacez-les
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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Statistiques pour le ML

Entraînez-vous par vous-même : Compilateur Python en ligne