Мои данные имеют 30000 строк и 140 столбцов, и я пытаюсь кластеризовать данные. Я делаю PCA, а затем использую около 12 ПК для использования в кластерном анализе. Я взял случайную выборку из 3000 наблюдений и провел ее, и потребовалось 44 минуты, чтобы запустить и PCA, и иерархическую кластеризацию.
Сотрудник сделал то же самое в SPSS, и это заняло значительно меньше времени? Любая идея, почему?
Вот упрощенная версия моего кода, которая отлично работает, но очень медленно работает над чем-то более 2000 наблюдений. Я включил набор данных USArrest, который очень мал, поэтому он не отражает мою проблему, а показывает, что я пытаюсь сделать. Я не решаюсь публиковать большой набор данных, поскольку это кажется грубым.
Я не уверен, как ускорить кластеризацию. Я знаю, что могу делать случайные выборки данных, а затем использовать функцию прогнозирования для назначения кластеров тестовым данным. Но оптимально я хотел бы использовать все данные в кластеризации, так как данные являются статическими и никогда не будут изменяться или обновляться.
library(factoextra)
library(FactoMineR)
library(FactoInvestigate)
## Data
# mydata = My data has 32,000 rows with 139 variables.
# example data with small data set
data("USArrests")
mydata <- USArrests
## Initial PCA on mydata
res.pca <- PCA(mydata, ncp=4, scale.unit=TRUE, graph = TRUE)
Investigate(res.pca) # this report is very helpful! I determined to keep 12 PC and start with 3 clusters.
## Keep PCA dataset with only 2 PC
res.pca1 <- PCA(mydata, ncp=2, scale.unit=TRUE, graph = TRUE)
## Run a HC on the PC: Start with suggested number of PC and Clusters
res.hcpc <- HCPC(res.pca1, nb.clust=4, graph = FALSE)
## Dendrogram
fviz_dend(res.hcpc,
cex = 0.7,
palette = "jco",
rect = TRUE, rect_fill = TRUE,
rect_border = "jco",
labels_track_height = 0.8
)
## Cluster Viz
fviz_cluster(res.hcpc,
geom = "point",
elipse.type = "convex",
#repel = TRUE,
show.clust.cent = TRUE,
palette = "jco",
ggtheme = theme_minimal(),
main = "Factor map"
)
#### Cluster 1: Means of Variables
res.hcpc$desc.var$quanti$'1'
#### Cluster 2: Means of Variables
res.hcpc$desc.var$quanti$'2'
#### Cluster 3: Means of Variables
res.hcpc$desc.var$quanti$'3'
#### Cluster 4: Means of Variables
res.hcpc$desc.var$quanti$'4'
#### Number of Observations in each cluster
cluster_hd = res.hcpc$data.clust$clust
summary(cluster_hd)
Есть идеи, почему SPSS намного быстрее?
Есть идеи, как это ускорить? Я знаю, что кластеризация является трудоемкой, но я не уверен, какой порог для эффективности, и мои данные о 30 000 записей и 140 переменных.
Являются ли некоторые другие пакеты кластеризации более эффективными? Предложения