Da es verwendet hierarchisches Clustering, HCPC
muss das untere Dreieck einer 600000 x 600000 Abstandsmatrix (~ 180 Milliarden Elemente) berechnen. Sie haben einfach nicht den Arbeitsspeicher, um dieses Objekt zu speichern, und selbst wenn Sie das täten, würde die Berechnung wahrscheinlich Stunden, wenn nicht sogar Tage dauern.
Es gab verschiedene Diskussionen zu Stack Overflow/Cross Validated beim Clustering großer Datensätze; einige mit Lösungen in R sind:
k-means clustering in R on very large, sparse matrix? (bigkmeans
)
Cluster Big Data in R and Is Sampling Relevant? (clara
)
Wenn Sie eine dieser alternativen Clustering-Ansätze verwenden möchten, können Sie es zu mca.res$ind$coord
in Ihrem Beispiel gelten würde. Eine andere Idee, die als Antwort auf das Problem clustering very large dataset in R vorgeschlagen wurde, besteht darin, zuerst k zu verwenden, um eine bestimmte Anzahl von Cluster-Zentren zu finden und dann hierarchisches Clustering zu verwenden, um den Baum von dort aus aufzubauen. Diese Methode wird tatsächlich über das kk
Argument von HCPC
implementiert.
Zum Beispiel mit dem tea
Datensatz von FactoMineR
:
library(FactoMineR)
data(tea)
## run MCA as in ?MCA
res.mca <- MCA(tea, quanti.sup = 19, quali.sup = c(20:36), graph = FALSE)
## run HCPC for all 300 individuals
hc <- HCPC(res.mca, kk = Inf, consol = FALSE)
## run HCPC from 30 k means centres
res.consol <- NULL ## bug work-around
hc2 <- HCPC(res.mca, kk = 30, consol = FALSE)
Das consol
Argument bietet die Möglichkeit, die Cluster aus der hierarchischen Clustering k-Mitteln zu konsolidieren; Diese Option ist nicht verfügbar, wenn kk
auf eine reelle Zahl eingestellt ist. Daher ist consol
hier auf FALSE
eingestellt. Das Objekt res.consul
ist auf NULL
eingestellt, um einen kleineren Fehler in FactoMineR
1.27 umzugehen.
Die folgende Handlung zeigt die Basis-Cluster auf den 300 Personen (kk = Inf
) und auf der Grundlage des 30 k Zentren (kk = 30
) für die Daten auf den ersten beiden MCA bedeuten Achsen aufgetragen:
Es
kann gesehen werden, dass die Ergebnisse sehr ähnlich sind. Sie sollten dies leicht auf Ihre Daten mit 600 oder 1000 k Mittelpunkten anwenden können, vielleicht bis zu 6000 mit 8 GB RAM. Wenn Sie eine größere Zahl verwenden möchten, möchten Sie wahrscheinlich eine effizientere Version mit bigkmeans
, SpatialTools::dist1
und fastcluster::hclust
codieren.
Ich konnte das Problem mit einem Dummy-Dataset replizieren. Ich denke, dass Sie HCPC den richtigen Weg, sowie MCA verwenden. Ich denke, dass Sie vielleicht in Sparse-Clustering-Algorithmen suchen, da HCPC Agnes-basiert ist. CLARA kann nützlich sein, aber andere sind verfügbar. –