【问题标题】:Cylindrical Clustering in R - clustering timestamp with other dataR中的Cylindrical Clustering - 用其他数据聚类时间戳
【发布时间】:2014-10-02 12:36:20
【问题描述】:

我正在学习 R,我必须使用时间戳字段对数字数据进行聚类。 其中一个参数是时间,由于数据严格依赖于昼夜,我想考虑该数据的“球形”性质。

据我从手册中看到,skmeans 等库不能处理“圆柱形”数据,只能处理“球形”数据(即所有组件都在极坐标中)。

我对合适解决方案的想法如下:我可以将 HOUR 列 (0-24) 分解为两个不同的列 X,Y 并用极坐标表示时间,例如 x^2+y^2=1 . 这样,具有欧几里德距离的 k 均值在解释数据时应该没有问题。

我说的对吗?

【问题讨论】:

  • 您解决了吗?成功了吗?
  • 是的,这对我的需求来说还不错:)

标签: r cluster-analysis k-means


【解决方案1】:

k-means 应该使用平方欧几里得距离。

但确实:将您的数据投影到有意义的欧几里得空间中是避免此类问题的简单方法。

但是请注意,您的平均值将不再位于圆柱体上。在许多情况下,您可以将平均值缩放到所需的圆柱体。但它可能会变为 0,则无法进行有意义的重新缩放。

另一个选项是kernel k-means。由于您想要的距离是数据转换后的欧几里得距离,因此您也可以“核化”此转换,并使用核 k-means。但在特定情况下转换数据实际上可能更快。只有在使用更复杂的变换(例如,到无限维向量空间)时,它才可能得到回报。

【讨论】:

    【解决方案2】:

    这是hm 的映射,其中h 是以小时为单位的时间(以及一小时的几分之一)。然后我们尝试kmeans,至少在这个测试中它似乎有效:

    h <- c(22, 23, 0, 1, 2, 10, 11, 12)
    ha <- 2*pi*h/24
    m <- cbind(x = sin(ha), y = cos(ha))
    
    kmeans(m, 2)$cluster # compute cluster assignments via kmeans
    ## [1] 2 2 2 2 2 1 1 1
    

    【讨论】:

    • 是的,谢谢!我知道该怎么做,但我只是不知道这是否是个好主意。但我想这是我能得到的最好的。 (而且它正在工作,所以我得到了很好的结果)
    • 那么现在每个一维点都必须用二维表示?如果我们已经有两个循环时间维度怎么办?比如星期几和一天中的小时?
    猜你喜欢
    • 2014-07-14
    • 2021-11-21
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2017-08-31
    • 2013-08-09
    • 2018-07-13
    相关资源
    最近更新 更多