Encodage des Variables Catégorielles
Les algorithmes de clustering comme K-means nécessitent des données numériques. Les variables catégorielles doivent être converties en format numérique à l'aide d'un encodage. Présentation de l'encodage ordinal et de l'encodage one-hot.
Encodage ordinal
L'encodage ordinal convertit des catégories ordonnées en valeurs numériques, en préservant leur rang. Par exemple, l'encodage ordinal de la colonne 'education_level'
transformera ses valeurs de "High School"
, "Bachelor's"
, "Master's"
, 'PhD'
en 0
, 1
, 2
, 3
.
Cela suppose une différence numérique significative entre les valeurs encodées, ce qui n'est pas toujours exact.
from sklearn.preprocessing import OrdinalEncoder
education_levels = [['High School',
"Bachelor's",
"Master's",
"PhD"]]
encoder = OrdinalEncoder(categories=education_levels)
df[['education_encoded']] = encoder.fit_transform(df[['education_level']])
Encodage one-hot
L'encodage one-hot convertit les catégories nominales (non ordonnées) en colonnes binaires, où chaque catégorie devient une nouvelle colonne. Pour une variable comportant n
catégories, cela crée généralement n
colonnes — une colonne vaut 1
pour la catégorie correspondante, les autres valent 0
. Cependant, seules n-1
colonnes sont nécessaires pour représenter l'information sans redondance.
Par exemple, une colonne 'color'
avec les valeurs 'red'
, 'blue'
et 'green'
peut être encodée avec seulement deux colonnes : 'color_red'
et 'color_blue'
. Si une ligne a 0
dans les deux colonnes, cela implique que la couleur est 'green'
. En supprimant une colonne, on évite la redondance.
La suppression de la colonne redondante est spécifiée via drop='first'
:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(drop='first', sparse=False)
encoded = encoder.fit_transform(df[['color']])
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
What is the difference between ordinal and one-hot encoding?
When should I use ordinal encoding instead of one-hot encoding?
Can you explain why one-hot encoding increases data dimensionality?
Awesome!
Completion rate improved to 2.94
Encodage des Variables Catégorielles
Glissez pour afficher le menu
Les algorithmes de clustering comme K-means nécessitent des données numériques. Les variables catégorielles doivent être converties en format numérique à l'aide d'un encodage. Présentation de l'encodage ordinal et de l'encodage one-hot.
Encodage ordinal
L'encodage ordinal convertit des catégories ordonnées en valeurs numériques, en préservant leur rang. Par exemple, l'encodage ordinal de la colonne 'education_level'
transformera ses valeurs de "High School"
, "Bachelor's"
, "Master's"
, 'PhD'
en 0
, 1
, 2
, 3
.
Cela suppose une différence numérique significative entre les valeurs encodées, ce qui n'est pas toujours exact.
from sklearn.preprocessing import OrdinalEncoder
education_levels = [['High School',
"Bachelor's",
"Master's",
"PhD"]]
encoder = OrdinalEncoder(categories=education_levels)
df[['education_encoded']] = encoder.fit_transform(df[['education_level']])
Encodage one-hot
L'encodage one-hot convertit les catégories nominales (non ordonnées) en colonnes binaires, où chaque catégorie devient une nouvelle colonne. Pour une variable comportant n
catégories, cela crée généralement n
colonnes — une colonne vaut 1
pour la catégorie correspondante, les autres valent 0
. Cependant, seules n-1
colonnes sont nécessaires pour représenter l'information sans redondance.
Par exemple, une colonne 'color'
avec les valeurs 'red'
, 'blue'
et 'green'
peut être encodée avec seulement deux colonnes : 'color_red'
et 'color_blue'
. Si une ligne a 0
dans les deux colonnes, cela implique que la couleur est 'green'
. En supprimant une colonne, on évite la redondance.
La suppression de la colonne redondante est spécifiée via drop='first'
:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(drop='first', sparse=False)
encoded = encoder.fit_transform(df[['color']])
Merci pour vos commentaires !