2017-07-25 4 views
0

J'ai une grande matrice de 500K observations à regrouper en utilisant la classification hiérarchique. En raison de la grande taille, je n'ai pas la puissance de calcul pour calculer la matrice de distance. Pour surmonter ce problème, j'ai choisi d'agréger ma matrice pour fusionner les observations qui étaient identiques pour réduire ma matrice à environ 10K observations. J'ai la fréquence pour chacune des lignes dans cette matrice agrégée. J'ai maintenant besoin d'incorporer cette fréquence comme un poids dans ma classification hiérarchique.Clustering de fréquence d'observation pondéré à l'aide de hclust dans R

Les données sont un mélange de variables numériques et catégoriques pour les observations 500K donc j'ai utilisé le paquet marguerite pour calculer la dissimilarité de mon agrégat. Je veux utiliser hclust dans le paquet stats pour l'ensemble de données agrégé mais je veux prendre en compte la fréquence de chaque observation. D'après les informations d'aide pour hclust les arguments sont les suivants:

hclust(d, method = "complete", members = NULL) 

Les informations pour l'argument membres est NULL :, ou un vecteur avec la taille de longueur d. Voir la section 'Détails'. Lorsque vous regardez la section des détails, vous obtenez: Si members != NULL, alors d est considérée comme une matrice de dissimilarité entre les clusters au lieu de dissimilarités entre les singletons et les membres donne le nombre d'observations par cluster. De cette manière, l'algorithme de groupe hiérarchique peut être 'démarré au milieu du dendrogramme', par exemple, afin de reconstruire la partie de l'arbre au-dessus d'une coupe (voir les exemples). Les différences entre les grappes peuvent être calculées efficacement (c'est-à-dire, sans se justifier) ​​seulement pour un nombre limité de combinaisons distance/liaison, la plus simple étant la distance euclidienne au carré et la liaison centroïde. Dans ce cas, les différences entre les grappes sont les distances euclidiennes au carré entre les moyennes de grappe. De la description ci-dessus, je ne suis pas sûr si je peux assigner mes poids de fréquence aux arguments de membres car il n'est pas clair si c'est le but de cet argument. Je souhaite l'utiliser comme ceci:

hclust(d, method = "complete", members = df$freq) 

Lorsque df$freq est la fréquence de chaque ligne de la matrice agrégée. Donc, si une ligne est dupliqué 10 fois cette valeur serait 10.

Si quelqu'un peut me aider, ce serait génial,

Merci

Répondre

0

Oui, cela fonctionne bien pour la plupart des liens, en particulier unique , moyenne du groupe et lien complet. Pour la salle etc., vous devez prendre en compte les poids correctement.

Mais même cette partie n'est pas difficile. Assurez-vous simplement d'utiliser les tailles de cluster, car vous devez passer la distance de deux clusters, pas deux points. La matrice doit donc contenir la distance de n1 points à l'emplacement x et n2 points à l'emplacement y. Pour min/max/mean, ce n disparaît ou s'annule. Pour Ward, vous devriez obtenir une formule SSQ.

+0

Salut, Merci pour votre commentaire. Je ne suis pas tout à fait sûr de ce que vous voulez dire par votre dernier paragraphe. Pourriez-vous développer un peu plus? La matrice de distance que je possède ne contiendra que des observations uniques car j'ai agrégé l'ensemble de données original, mais l'argument des membres contiendra pour chaque observation le nombre de fois qu'il s'est produit dans l'ensemble de données original. Comme j'ai mélangé des types de données pour mes variables je ne peux que calculer la dissemblance de Gower donc je ne peux pas utiliser le lien de paroisse mais c'est bon à savoir alors merci! –

+0

Je n'ai pas les équations de Ward sous la main, donc vous devez faire ce calcul trivial vous-même. Probablement 'n * m * d * d'. –