2014-07-15 5 views
-1

Je suis un peu curieux de savoir comment sklearn traite les variables catégoriques représentées par les nombres, tels que New York = 1 Boston = 2 Chicago = 3. Python saura-t-il que c'est catégorique ou simplement le traiter comme numérique ordonné? J'ai vu un poste here discuter de ce problème. Je ne sais pas si c'est correct ou non.Variable catégorique numérique dans Sklearn

Aussi je ne sais pas si je dois les changer tous en format matrice creuse tels que

[1,0,0] 
[0,1,0] 
[0,0,1] 

Quelle serait la différence entre ces deux formats lorsqu'ils sont appliqués à sklearn bibliothèque?

Si sklearn ne peut pas gérer correctement les variables catégorielles, est-ce que R le battra pour cela?

Merci!

Mise à jour:

J'ai vu la question de duplication recommandé par @larsmans mais en fait ne pas répondre à ma question en termes de la réponse in this post, qui a dit que sklearn ne peut pas traiter bien avec des variables et comment il le comparer avec le paquet dans R. J'ai également vu quelques messages avant que cela soit OK avec un grand ensemble de données mais affectera un petit ensemble de données. À partir de @larsmans, il semble qu'à l'exception de l'algorithme de l'arbre, d'autres méthodes devraient transférer les variables catégorielles numériques aux variables factices. En fait, j'ai plus de 3000 catégories pour chaque variable. Je ne pense pas qu'il soit efficace de les changer tous à la matrice clairsemée en utilisant DictVectorizer ou oneHotEncoder sera un moyen efficace de le faire.

+0

Hi @larsmans s'il vous plaît voir ma mise à jour – MYjx

Répondre

2

On dirait que c'est ce que vous avez besoin DictVectorizer

Pour représenter une variables multi-classe en nombre ordinaire ne peut pas être une bonne idée. La meilleure pratique devrait être de transformer la variable catégorielle n-classe en n variables booléennes. Dans votre exemple, 3 nouvelles variables booléennes doivent être créées pour marquer "== New York", "== Boston" et "== Chicago".

from sklearn.feature_extraction import DictVectorizer 
v = DictVectorizer(sparse = True) 


D = [{"Value" : 100, "City": "New York"}, 
    {"Value" : 70, "City": "Boston"}, 
    {"Value" : 99, "City": "Chicago"}, 
    ] 

X = v.fit_transform(D) 
print v.get_feature_names() 
print X 

Sortie:

['City=Boston', 'City=Chicago', 'City=New York', 'Value'] 
[[ 0. 0. 1. 100.] 
[ 1. 0. 0. 70.] 
[ 0. 1. 0. 99.]] 
+0

effectivement ma variable a plus de 3000 catégories Je ne sais pas si ça va être efficace pour le faire – MYjx

+0

@MYjx, vous pouvez choisir d'utiliser une matrice clairsemée pour stocker les fonctionnalités. La cardinalité élevée ne devrait pas poser de problème tant que la taille de votre échantillon n'est pas écrasante. – JimmyK

+0

thx! En fait, j'ai seulement 4000 enregistrements. J'ai peur que si j'ai trop de variables, le df sera trop petit – MYjx

Questions connexes