【发布时间】:2018-05-13 05:57:37
【问题描述】:
我使用以下 tsclust 语句对数据进行聚类
SURFSKINTEMP_CLUST <- tsclust(SURFSKINTEMP, k = 10L:20L,
distance = "dtw_basic", centroid = "dba",
trace = TRUE, seed = 938,
norm = "L2", window.size = 2L,
args = tsclust_args(cent = list(trace = TRUE)))
SURFSKINTEMP 很大,
str(SURFSKINTEMP)
List of 327239
$ V1 : num [1:7] 0.13 0.631 -0.178 0.731 0.86 ...
$ V2 : num [1:6] 0.117 -0.693 -0.911 -0.911 -0.781 ...
$ V3 : num [1:7] 0.117 -0.693 -0.911 -0.911 -0.781 ...
$ V4 : num [1:6] -0.693 -0.911 -0.911 -0.781 -0.604 ...
然后,我想使用 cvi 来评估最佳聚类数“k”
names(SURFSKINTEMP_CLUST) <- paste0("k_",10L:20L)
sapply(SURFSKINTEMP_CLUST, cvi, type = "internal")
但是,有一个错误
> sapply(SURFSKINTEMP_CLUST, cvi, type = "internal")
Error: cannot allocate vector of size 797.8 Gb
在我的情况下,我如何评估最佳聚类数“k”?
【问题讨论】:
-
针对数据集的样本运行 cvi,例如 10,000 系列。多次执行此操作以检查稳定性。如果结果因样本而异,请引导(大约 1000 次重复)并取平均值。
-
@justin cress 你能告诉我一些代码如何做到这一点
-
@pan 类似于
surfSkinSample <- SURFSKINTEMP[sample(seq_along(SURFSKINTEMP), 1e4)]。在 surfSkinSample 上运行您的分析。保存结果。然后重复此操作 6 或 7 次,以查看相同数量的集群是否始终是最好的。如果您得到混合结果,请执行此过程的引导程序,将最佳聚类数的平均值作为最佳结果。 -
@lmo,在我的情况下如何执行引导
-
@pan 答案是否为您提供了所需的内容?
标签: r time-series cluster-analysis tsclust