几天内集群成员关系的统计信息

时间:2016-11-19 05:07:49

标签: r statistics time-series cluster-analysis k-means

假设我每小时数据对应5个类别的连续10天,创建时间为:

library(xts)
set.seed(123)
timestamp <- seq(as.POSIXct("2016-10-01"),as.POSIXct("2016-10-10 23:59:59"), by = "hour")
data <- data.frame(cat1 = rnorm(length(timestamp),150,5),
                         cat2 = rnorm(length(timestamp),130,3),
                         cat3 = rnorm(length(timestamp),150,5),
                         cat4 = rnorm(length(timestamp),100,8),
                         cat5 = rnorm(length(timestamp),200,15))
data_obj <- xts(data,timestamp) # creat time-series object
head(data_obj,2)

现在,对于每一天,我分别执行群集,并使用简单的kmeans查看这些类别相对于彼此的行为:

daywise_data <- split.xts(data_obj,f="days",k=1) # split data day wise
clus_obj <- lapply(daywise_data, function(x){ # clustering day wise
  return (kmeans(t(x), 2))
})

群集结束后,我用

显示不同10天的群集关系
sapply(clus_obj,function(x) x$cluster) # clustering results

我发现结果为

enter image description here

在目视检查中,很明显cat1cat3始终保留在同一群集中。同样地,cat4cat5在10天内大部分位于不同的群集中。

除了目视检查外,是否有自动方法从这样的聚类表中收集此类统计数据

注意:这是一个虚拟的例子。我有一个数据框,包含连续100天的80个类别。如上所述的自动摘要将减少工作量。

1 个答案:

答案 0 :(得分:0)

对计数群集评估措施显示了解决此问题的简便方法。

这些方法不是查看不稳定的对象集群分配,而是查看两个对象是否在同一个集群中(称为&#34;对&#34;)。

因此,您可以检查这些对是否随时间变化很大。

由于k-means是随机的,你可能还想为每个时间片运行几次,因为它们可能返回不同的聚类!

然后你可以这么说在90%的结果中,系列1与系列2在同一簇中。等