2012-09-12 4 views
2

J'essaie d'exécuter fastclust sur un très grand nombre de distances, mais je rencontre un problème.Clustering hiérarchique Grande matrice de distance clairsemée R

J'ai un très grand fichier csv (environ 91 millions de lignes si une boucle est trop long en R) des similitudes entre les mots-clés (environ 50 000 mots-clés uniques) que lorsque je lis dans un data.frame ressemble:

> df 
kwd1 kwd2 similarity 
a b 1 
b a 1 
c a 2 
a c 2 

il est une liste clairsemée et je peux le convertir en une matrice creuse en utilisant matrice creuse():

> myMatrix 
    a b c 
a . . . 
b 1 . . 
c 2 . . 

Cependant, lorsque je tente de le transformer en un objet à l'aide dist as.dist(), J'ai l'erreur que le «problème est trop grand» de R. J'ai lu les autres questions dist sur ici, mais le code que d'autres ont suggéré ne fonctionne pas pour mon exemple de jeu de données ci-dessus.

Merci pour toute aide!

Répondre

3

Tout en utilisant une matrice creuse en premier lieu semble être une bonne idée, je pense qu'il ya un peu d'un problème avec cette approche: vos distances manquantes sont codées 0 s, non pas comme NA s (voir Creating (and Accessing) a Sparse Matrix with NA default entries) . Comme vous le savez, en cas de clustering, une dissemblance nulle a une signification totalement différente de celle qui manque ...

De toute façon, vous avez besoin d'un objet dist avec beaucoup de NA s pour vos dissimilarités manquantes. Malheureusement, votre problème est si grand que cela exigerait trop de mémoire:

d <- dist(x = rep(NA_integer_, 50000)) 
# Error: cannot allocate vector of size 9.3 Gb 

Et qui est seulement affaire à l'entrée ... Même avec une machine 64 bits avec beaucoup de mémoire, je ne suis pas sûr de la algorithme de clustering lui-même ne s'étoufferait pas ou ne fonctionnerait pas indéfiniment.

Vous devriez envisager de diviser votre problème en plus petits morceaux.

Questions connexes