首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用dtwclust软件包评价时间序列聚类中“k”的最优数目

用dtwclust软件包评价时间序列聚类中“k”的最优数目
EN

Stack Overflow用户
提问于 2017-11-29 13:41:23
回答 2查看 2.5K关注 0票数 2

我使用以下tsclust语句对数据进行聚类

代码语言:javascript
复制
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很大

代码语言:javascript
复制
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”。

代码语言:javascript
复制
names(SURFSKINTEMP_CLUST) <- paste0("k_",10L:20L)
sapply(SURFSKINTEMP_CLUST, cvi, type = "internal")

但是,有一个错误

代码语言:javascript
复制
> sapply(SURFSKINTEMP_CLUST, cvi, type = "internal")
Error: cannot allocate vector of size 797.8 Gb

在我的情况下,如何评估簇“k”的最佳数目?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-29 20:26:25

指定type = "internal"将尝试计算7个指标:剪影、邓恩、COP、DB、DB*、CH和SF。正如cvi的文档中所提到的,前3将尝试计算整个跨距离矩阵,在您的例子中,这将是一个327,239 x 327,239矩阵;您将很难找到一台能够分配该矩阵的计算机,计算将花费很长时间。

由于您将DBA用于质心,所以您可以看到DB或DB*对您的应用程序是否有意义

代码语言:javascript
复制
sapply(SURFSKINTEMP_CLUST, cvi, type = c("DB", "DBstar"))

您还可以查看稍微简单的弯头法,同时要记住,您可以使用以下方法计算平方误差之和(请参阅TSClusters-class文档):

代码语言:javascript
复制
sapply(SURFSKINTEMP_CLUST, function(cl) { sum(cl@cldist ^ 2) })
票数 0
EN

Stack Overflow用户

发布于 2017-11-29 14:08:36

错误消息表明,您正在尝试生成比可用资源所支持的更多的数据。在这种情况下,尝试对一个较小的样本进行分析。重复分析几次。

代码语言:javascript
复制
reps = 1000
samp_size = 10000
result <- c()
for(j in 1:reps){
    sample = SURFSKINTEMP[sample(seq_along(SURFSKINTEMP, samp_size)),]
    sample_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)))

    result[j] <- sapply(sample_clust, cvi, type = "internal")

}

提供可以检查的结果列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47554245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档