pca和聚类分析,计算速度非常慢
pca and cluster analysis, very slow computing
我的数据有 30,000 行和 140 列,我正在尝试对数据进行聚类。我正在做一个 pca,然后使用大约 12 个 pc 用于聚类分析。我从 3000 个观测值中提取了 运行dom 样本并 运行 它花了 44 分钟来 运行 pca 和层次聚类。
一位同事在 SPSS 中做了同样的事情并且花费了更少的时间?知道为什么吗?
这是我的代码的简化版本,它运行良好,但在超过 2000 次观察时确实很慢。我包括了 USArrest 数据集,它非常小,所以它并不能真正代表我的问题,但显示了我正在尝试做的事情。我对 post 大型数据集犹豫不决,因为这看起来很粗鲁。
我不确定如何加快集群速度。我知道我可以对数据进行 运行dom 样本,然后使用预测函数将聚类分配给测试数据。但最佳情况下,我想使用集群中的所有数据,因为数据是静态的,永远不会更改或更新。
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 个变量的数据。
其他一些集群包是否更有效?建议?
HCPC 是使用 Ward 标准对主成分进行的层次聚类。您可以对聚类部分使用 k-means 算法,这样速度更快:层次聚类的时间复杂度为 O(n³),而 k-means 的复杂度为 O(n),其中 n 是观察次数。
由于通过 k-means 优化的标准和使用 Ward 的层次聚类是相同的(最小化簇内总方差),您可以首先使用具有大量簇(例如 300)的 k-means然后 运行 如果您需要保持层次方面,则在聚类的中心进行层次聚类。
我的数据有 30,000 行和 140 列,我正在尝试对数据进行聚类。我正在做一个 pca,然后使用大约 12 个 pc 用于聚类分析。我从 3000 个观测值中提取了 运行dom 样本并 运行 它花了 44 分钟来 运行 pca 和层次聚类。
一位同事在 SPSS 中做了同样的事情并且花费了更少的时间?知道为什么吗?
这是我的代码的简化版本,它运行良好,但在超过 2000 次观察时确实很慢。我包括了 USArrest 数据集,它非常小,所以它并不能真正代表我的问题,但显示了我正在尝试做的事情。我对 post 大型数据集犹豫不决,因为这看起来很粗鲁。
我不确定如何加快集群速度。我知道我可以对数据进行 运行dom 样本,然后使用预测函数将聚类分配给测试数据。但最佳情况下,我想使用集群中的所有数据,因为数据是静态的,永远不会更改或更新。
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 个变量的数据。
其他一些集群包是否更有效?建议?
HCPC 是使用 Ward 标准对主成分进行的层次聚类。您可以对聚类部分使用 k-means 算法,这样速度更快:层次聚类的时间复杂度为 O(n³),而 k-means 的复杂度为 O(n),其中 n 是观察次数。
由于通过 k-means 优化的标准和使用 Ward 的层次聚类是相同的(最小化簇内总方差),您可以首先使用具有大量簇(例如 300)的 k-means然后 运行 如果您需要保持层次方面,则在聚类的中心进行层次聚类。