2017-05-31 1 views
0

J'ai un attribut catégoriel qui contient des valeurs de chaîne. trois d'entre eux contiennent le nom du jour (mon --- soleil) et l'intervalle de temps (le matin après-midi le soir), les deux autres comme je l'ai mentionné avant ont des noms de district et de rue. suivi par le genre, le rôle, les commentaires (c'est un champ fixe prédéfini qui a des valeurs comme bon, mauvais fort, etc.) nom et prénom. mon intention est de les regrouper et de les visualiser. J'ai appliqué le clustering k-mean en utilisant cette fraise WEKA cela n'a pas fonctionné. Maintenant, je souhaite appliquer le clustering hiérarchique dessus. J'ai trouvé ce code:Classification hiérarchique pour les données catégorielles en python

import scipy 
import scipy.cluster.hierarchy as sch 
X = scipy.randn(100, 2)  # 100 2-dimensional observations 
d = sch.distance.pdist(X) # vector of (100 choose 2) pairwise distances 
L = sch.linkage(d, method='complete') 
ind = sch.fcluster(L, 0.5*d.max(), 'distance') 

Cependant, X dans le code ci-dessus est numérique; J'ai des données catégoriques. Existe-t-il un moyen d'utiliser un certain nombre de données catégoriques pour trouver la distance? En d'autres termes, puis-je utiliser des données catégoriques de valeurs de chaîne pour trouver la distance? je puis utiliser cette distance dans sch.linkage(d, method='complete')

+0

Comment envisagez-vous de définir la distance entre les chaînes - ou cela fait-il partie de votre question? – Prune

+0

c'est la question, ma compréhension est que la méthode de calcul de la distance peut être définie dans sch.distance.pdist .I l'intention d'utiliser la fonction cosinus mais pas sûr si c'est la bonne façon de trouver la distance, donc mon premier problème est comment définir la variable X dans le code ci-dessus pour une variable catégorielle. – Nhqazi

+0

la question de base je suppose est de savoir comment représenter des variables catégorielles ayant plusieurs valeurs. Je comprends que la méthode kmode est utilisée pour les variables catégorielles mais j'ai l'intention d'utiliser la classification hiérarchique. – Nhqazi

Répondre

1

Je pense que nous avons identifié le problème, vous laissez les X valeurs telles qu'elles sont, les données de chaîne. Vous pouvez les passer à pdist, mais vous devez également fournir une fonction 2-arity (2 entrées, sortie numérique) pour la mesure de distance.

La plus simple serait que les classifications égales aient une distance de 0; tout le reste est 1. Vous pouvez le faire avec

d = sch.distance.pdist(X, lambda u, v: u != v) 

Si vous avez d'autres discriminations de classe à l'esprit, juste la logique de code pour retourner la distance souhaitée, l'envelopper dans une fonction, puis passer le nom de la fonction à pdist. Nous ne pouvons pas vous aider, parce que vous ne nous avez rien dit au sujet de vos classes ou de la sémantique du modèle.

Est-ce que cela vous aide à bouger?

+0

Merci. Mes données ont plus de 10 attributs et deux d'entre eux contiennent le nom du quartier et des rues dans une ville. Chacun d'entre eux pourrait avoir de nombreuses valeurs distinctes peuvent être plus de 20. Je ne suis pas sûr que la technique ci-dessus est applicable pour ce genre de valeurs catégoriques. s'il vous plaît conseil. – Nhqazi

+0

Je vous conseille de * spécifier * le problème. "Je ne suis pas sûr ..." n'est pas une spécification. J'ai répondu à votre question: comment représenter les données catégoriques (comme vous le faites déjà) et comment gérer une fonction de distance. Je vous ai donné un échantillon trivial. Je ne peux pas répondre à une question de suivi lorsque vous continuez à éviter tout commentaire productif sur ce dont vous avez besoin pour une mesure de distance. – Prune

+0

ok voici ma spécification. J'ai un attribut catégorique qui contient des valeurs de chaîne. trois d'entre eux contiennent le nom du jour (mon --- soleil) et l'intervalle de temps (le matin après-midi le soir), les deux autres comme je l'ai mentionné avant ont des noms de district et de rue. suivi par le genre, le rôle, les commentaires (c'est un champ fixe prédéfini qui a des valeurs comme bon, mauvais accord fort, etc.) nom et prénom. mon intention est de les regrouper et de les visualiser. J'ai appliqué le clustering k-mean en utilisant cette fraise WEKA cela n'a pas fonctionné. J'espère avoir précisé le problème maintenant. – Nhqazi