Je dois effectuer un cluster de K-moyen sur une matrice vraiment énorme (environ 300.000x100.000 valeurs supérieures à 100 Go). Je veux savoir si je peux utiliser le logiciel R pour effectuer ceci ou weka. Mon ordinateur est un multiprocesseur avec 8 Go de RAM et des centaines Go d'espace libre. P>
J'ai assez d'espace pour les calculs, mais le chargement d'une telle matrice semble être un problème avec R (je ne pense pas que l'utilisation du package de BigMemory aiderait-moi et que la grosse matrice utilise automatiquement toute ma RAM puis mon fichier de swap si pas assez espace). p>
Donc, ma question est la suivante: quel logiciel dois-je utiliser (éventuellement en association avec d'autres packages ou paramètres personnalisés). P>
Merci de m'aider. P>
Remarque: j'utilise Linux. P>
4 Réponses :
je garde le lien (qui peut être utile à L'utilisateur spécifique) mais je suis d'accord avec le commentaire de Gavin! Pour effectuer un clustering K-moyen sur de grandes données, vous pouvez utiliser la fonction RXKMEANS implémentée dans le Révolution R Entreprise La mise en œuvre exclusive de R (je sais que cela peut être un problème); Cette fonction semble être capable de gérer ce type de données. P>
Sur Stackoverflow, des réponses simples qui utilisent des liens hors site sont fronçées au mieux, au mieux. Que se passe-t-il si cette page se déplace ou devient indisponible? Essayez d'inclure suffisamment d'informations dans votre réponse afin qu'elle soit propre - par tous les moyens attributs où l'idée provenait mais n'utilise pas simplement un lien dans une réponse.
Cela doit-il être k-moyen? Une autre approche possible consiste à transformer vos données en un réseau en premier, puis appliquez le clustering graphique. Je suis l'auteur de MCL , un algorithme utilisé assez souvent en bioinformatique. La mise en œuvre liée à devrait facilement accumuler des réseaux avec des millions de nœuds - votre exemple aurait 300k nœuds, en supposant que vous disposez de 100k attributs. Avec cette approche, les données seront naturellement éliminées dans l'étape de transformation des données - et cette étape deviendra probablement le goulot d'étranglement. Comment calculez-vous la distance entre deux vecteurs? Dans les applications que j'ai traitées avec j'ai utilisé la corrélation Pearson ou Spearman, et MCL est expédié avec un logiciel pour effectuer efficacement ce calcul sur des données à grande échelle (il peut utiliser plusieurs processeurs et plusieurs machines). P>
Il y a toujours un problème avec la taille de données, car la plupart des algorithmes de clustering vous demanderont d'effectuer au moins toutes les comparaisons par paires au moins une fois. Vos données sont-elles vraiment stockées comme une matrice géante? Avez-vous de nombreux zéros dans l'entrée? Alternativement, avez-vous un moyen de jeter des éléments plus petits? Avez-vous accès à plus d'une machine afin de distribuer ces calculs? P>
Micans +1 MCL, +1 si je pouvais pour "Comment calculez-vous la distance entre deux vecteurs?" -- important. Delphine, première expérience sur les échantillons d'ensembles d'entraînement qui fonctionnent rapidement, voyez comment ils se groupent.
+1 Pas pour l'amour de la réciprocité, mais pour les petits ensembles d'entraînement d'échantillons - assez important. Delphine, ce serait bien si vous vous engagiez un peu plus. Je me demande si votre jeu de données est vraiment décrit comme des unités, chacun ayant des attributs de 100k -, d'où ma question si elle est clairsemée (riche en zéro). Si tel est le cas, la distance entre les vecteurs pourrait en effet ressembler davantage à une distance de type chevauchement entre les ensembles et, à mon sens, renforcez le cas d'une approche basée sur un réseau.
Puisque nous ne savons rien du tout sur les données, ni les objectifs du questionneur
Pour cela, juste quelques liaisons générales:
I. Conférences vidéo de Guyon - nombreux papiers et livres aussi.
Sélection de fonctionnalités sur STATS.STACKEXCHANGE P>
Vérifiez mahout, il fera k moyen sur un ensemble de données volumineux: p>
Le problème que vous êtes susceptible de courir avec R est celui qui stocke ces données dans une matrice limite des indices à la valeur entière maximale (2147483647), et vous avez plus d'éléments que cela. Ce n'est pas une limitation de la mémoire, mais une limitation résultant de l'utilisation d'entiers pour indexer les données. Pouvez-vous goûter à la matrice à la place?
Pourquoi voulez-vous regrouper tous les 300 000 objets à la fois? Pourquoi ne pas prendre un échantillon plus petit, groupez-vous et assignez ensuite les objets restants à leur cluster le plus proche?
Combien de grappes recherchez-vous? Existe-t-il des échantillons avec un regroupement connu, pour la validation?