【问题标题】:Statistics on cluster member relationships over several days多日集群成员关系统计
【发布时间】:2017-04-03 00:48:41
【问题描述】:

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

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

我发现结果为

通过目视检查,很明显cat1cat3 始终保持在同一个集群中。同样,cat4cat5 在 10 个不同的日子里大多位于不同的集群中。

除了目视检查之外,是否有任何自动方法可以从此类聚类表中收集此类统计数据


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

【问题讨论】:

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


    【解决方案1】:

    对计数集群评估度量显示了解决此问题的简单方法。

    这些方法不是查看不稳定的对象-簇分配,而是查看两个对象是否在同一个簇中(称为“对”)。

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

    由于 k-means 是随机的,您可能还希望对每个时间片运行多次,因为它们可能会返回不同的聚类!

    然后你可以这样说,例如在 90% 的结果中,系列 1 与系列 2 位于同一集群中。等等

    【讨论】:

    • 你的解释是正确的,我想计算这个百分比。但是Wikipedia 中提到的外部评估指标似乎不适用于我的情况,因为我没有基本事实(基准)。这种聚类是无监督的。您的进一步见解可能会帮助我进一步挖掘......
    • 可以使用相同的方法来比较来自不同时间点的两个结果。这些方法中的大多数都是对称的,本质上它们是分区的相似性度量。
    • 我稍微改述了我的问题,并在this堆栈溢出链接得到了答案
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 2013-05-17
    • 2021-04-07
    • 2019-06-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多