Ponieważ używa hierarchiczne klastrowanie, HCPC
musi obliczyć dolny trójkąt matrycy odległości 600000 x 600000 (~ 180 miliardów elementów). Po prostu nie masz pamięci RAM do przechowywania tego obiektu, a nawet gdyby tak było, obliczenie zajęłoby wiele godzin, jeśli nie dni.
Odbyło się wiele dyskusji na temat przepełnienia stosu/Cross Validated na grupowanie dużych zbiorów danych; niektóre z rozwiązań w dziedzinie badań obejmują:
k-means clustering in R on very large, sparse matrix? (bigkmeans
)
Cluster Big Data in R and Is Sampling Relevant? (clara
)
Jeśli chcesz skorzystać z jednej z tych alternatywnych rozwiązań klastrowych, należy zastosować go do mca.res$ind$coord
w swoim przykładzie.
Innym pomysłem, sugerowanym w odpowiedzi na problem clustering very large dataset in R, jest pierwsze użycie k oznacza znalezienie określonej liczby centrów klastra, a następnie użycie hierarchicznego klastrowania do zbudowania drzewa z tego miejsca. Ta metoda jest faktycznie zaimplementowana za pomocą argumentuz HCPC
.
Na przykład, korzystając z danych tea
ustawionych 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)
consol
Argument oferuje możliwość konsolidacji klastrów z wykorzystaniem hierarchicznego grupowania k-średnich; ta opcja nie jest dostępna, gdy kk
jest ustawiona na rzeczywistą liczbę, dlatego consol
jest tutaj ustawione na FALSE
. Obiekt res.consul
jest ustawiony na NULL
w celu obejścia drobnego błędu w FactoMineR
1.27.
Poniższy działka przedstawiają klastry oparte na 300 osób (kk = Inf
) oraz w oparciu o 30 k oznacza ośrodki (kk = 30
) danych kreślone na pierwsze dwa MCA osiach:
To widać, że wyniki są bardzo podobne. Powinieneś być w stanie łatwo zastosować to do swoich danych z 600 lub 1000 k oznacza centra, może nawet do 6000 z 8 GB pamięci RAM. Jeśli chcesz użyć większej liczby, prawdopodobnie zechcesz zakodować bardziej wydajną wersję, używając bigkmeans
, SpatialTools::dist1
i fastcluster::hclust
.
Udało mi się powielić problem za pomocą fikcyjnego zestawu danych. Myślę, że używasz HCPC we właściwy sposób, a także MCA. Myślę, że możesz chcieć przyjrzeć się algorytmom rzadkiej klastrowania, ponieważ HCPC jest oparty na agnes. CLARA może być przydatna, ale inne są dostępne. –