Si vous lisez la documentation pour OneHotEncoder
, vous verrez que l'entrée pour fit
est "Tableau d'entrée de type entier". Donc, vous devez effectuer deux étapes pour vos données codées en one hot
from sklearn import preprocessing
cat_features = ['color', 'director_name', 'actor_2_name']
enc = preprocessing.LabelEncoder()
enc.fit(cat_features)
new_cat_features = enc.transform(cat_features)
print new_cat_features # [1 2 0]
new_cat_features = new_cat_features.reshape(-1, 1) # Besoin de la forme correcte
ohe = preprocessing.OneHotEncoder(sparse=False) # Plus facile à lire
print ohe.fit_transform(new_cat_features)
Sortie:
[[ 0. 1. 0.]
[ 0. 0. 1.]
[ 1. 0. 0.]]
EDIT
À partir de la version 0.20
, cela est devenu un peu plus facile, non seulement parce que OneHotEncoder
gère désormais bien les chaînes, mais aussi parce que nous pouvons transformer facilement plusieurs colonnes en utilisant ColumnTransformer
, voir ci-dessous pour un exemple
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
X = np.array([['apple', 'red', 1, 'round', 0],
['orange', 'orange', 2, 'round', 0.1],
['bannana', 'yellow', 2, 'long', 0],
['apple', 'green', 1, 'round', 0.2]])
ct = ColumnTransformer(
[('oh_enc', OneHotEncoder(sparse=False), [0, 1, 3]),], # les numéros de colonne auxquels je veux appliquer cela
remainder='passthrough' # Cela laisse le reste de mes colonnes en place
)
print(ct2.fit_transform(X)) # Remarquez que la sortie est une chaîne
Sortie :
[['1.0' '0.0' '0.0' '0.0' '0.0' '1.0' '0.0' '0.0' '1.0' '1' '0']
['0.0' '0.0' '1.0' '0.0' '1.0' '0.0' '0.0' '0.0' '1.0' '2' '0.1']
['0.0' '1.0' '0.0' '0.0' '0.0' '0.0' '1.0' '1.0' '0.0' '2' '0']
['1.0' '0.0' '0.0' '1.0' '0.0' '0.0' '0.0' '0.0' '1.0' '1' '0.2']]