Spyder (python 3.7)
Je suis confronté aux erreurs suivantes ici. J'ai déjà mis à jour toutes les bibliothèques à partir d'anaconda Prompt. Mais je ne peux pas trouver la solution du problème.
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
Traceback (most recent call last):
File "<ipython-input-4-05deb1f02719>", line 2, in <module>
onehotencoder = OneHotEncoder(categorical_features = [1])
TypeError: __init__() got an unexpected keyword argument 'categorical_features'
Donc, en fonction de votre code, vous devez:
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
# Country column
ct = ColumnTransformer([("Country", OneHotEncoder(), [1])], remainder = 'passthrough')
X = ct.fit_transform(X)
# Male/Female
labelencoder_X = LabelEncoder()
X[:, 2] = labelencoder_X.fit_transform(X[:, 2])
Vous avez remarqué comment le premier LabelEncoder a été supprimé, vous n'avez plus besoin d'appliquer à la fois l'étiquette encodée et l'encodeur à chaud sur la colonne.
(J'ai supposé que votre exemple venait du cours ML Udemy, et la première colonne était une liste de pays, tandis que la seconde était un choix binaire masculin/féminin)
Selon la documentation c'est la __init__
ligne:
class sklearn.preprocessing.OneHotEncoder(categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')
Comme vous pouvez le voir, l'init n'obtient pas la variable categorical_features
Vous avez un indicateur categories:
categories'auto 'ou une liste de catégories de type tableau, par défaut =' auto '(valeurs uniques) par fonctionnalité:
"Auto": déterminez automatiquement les catégories à partir des données d'entraînement.
list: categories [i] contient les catégories attendues dans la ième colonne. Les catégories transmises ne doivent pas mélanger des chaînes et des valeurs numériques dans une seule entité et doivent être triées en cas de valeurs numériques.
Les catégories utilisées se trouvent dans l'attribut categories _.
Attributs: categories_list de tableaux Les catégories de chaque fonctionnalité déterminées lors de l'ajustement (dans l'ordre des fonctionnalités dans X et correspondantes avec la sortie de transform). Cela inclut la catégorie spécifiée dans drop (le cas échéant).
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn.compose import ColumnTransformer
label_encoder_x_1 = LabelEncoder()
X[: , 2] = label_encoder_x_1.fit_transform(X[:,2])
transformer = ColumnTransformer(
transformers=[
("OneHot", # Just a name
OneHotEncoder(), # The transformer class
[1] # The column(s) to be applied on.
)
],
remainder='passthrough' # donot apply anything to the remaining columns
)
X = transformer.fit_transform(X.tolist())
X = X.astype('float64')
travailler comme un charme :)
En supposant que c'est un problème du cours ML du code complet d'Udemy, j'ai remplacé l'encodeur 1 par le transformateur de colonne comme suggéré par Antoine Jaussoin dans le commentaire ci-dessus.
Données catégoriques
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([("Geography", OneHotEncoder(), [1])], remainder = 'passthrough')
X = ct.fit_transform(X)
Votre colonne Sexe aura désormais l'index 4
labelencoder_x_2=LabelEncoder()
X[:,4]=labelencoder_x_2.fit_transform(X[:,4])
pour éviter le piège variable factice
X=X[:, 1:]
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X=np.array(columnTransformer.fit_transform(X),dtype=np.str)
Depuis la dernière version de la bibliothèque sklearn supprimée categorical_features paramètre pour la classe onehotencoder. Il est conseillé d'utiliser la classe ColumnTransformer pour les jeux de données catégoriels. Reportez-vous à la documentation officielle de sklearn pour plus de précisions.