【问题标题】:How to cluster by trend instead of by distance in R?如何在 R 中按趋势而不是按距离进行聚类?
【发布时间】:2012-05-20 07:29:48
【问题描述】:

clara() 函数中的 k-medoids 使用距离来形成簇,所以我得到了这个模式:

a <- matrix(c(0,1,3,2,0,.32,1,.5,0,.35,1.2,.4,.5,.3,.2,.1,.5,.2,0,-.1), byrow=T, nrow=5)
cl <- clara(a,2)
matplot(t(a),type="b", pch=20, col=cl$clustering) 

但我想找到一种聚类方法,根据其趋势为每条线分配一个聚类,因此第 1、2 和 3 行属于一个聚类,第 4 和 5 行属于另一个聚类。

【问题讨论】:

    标签: r cluster-analysis


    【解决方案1】:

    您可以使用k means 聚类算法,但在去那里之前,我建议您创建一个N* N 矩阵,其中每个元素代表一个趋势与另一个趋势的相关分数。

    然后使用任何聚类算法,例如kmeans/hierarchical clustering,对相似的趋势进行聚类。

    R 代码

    a <- matrix(c(0,1,3,2,0,.32,1,.5,0,.35,1.2,.4,.5,.3,.2,.1,.5,.2,0,-.1),byrow=T, nrow=5)
    
    library(TSclust)
    
    library(reshape2)
    
    Tech1 <- diss(a,"COR")       # Correlation
    Tech2 <- diss(a,"EUC")       # Euclidean Distance
    Tech3 <- diss(a, "DTW")      # Dynamic Time Wrapping
    
    clust1 <- kmeans(Tech1, 3)
    clust1 <- kmeans(Tech2, 3)
    clust1 <- kmeans(Tech3, 3)
    
    clust1$cluster
    >> 1 2 3 4 5 
    >> 1 2 2 3 3 
    
    clust2$cluster
    >> 1 2 3 4 5 
    >> 1 2 2 3 3
    
    clust3$cluster
    >> 1 2 3 4 5 
    >> 3 2 2 1 1 
    

    【讨论】:

      【解决方案2】:

      做更多预处理。对于任何数据挖掘来说,90% 的工作都是预处理。

      例如,如果您想按趋势进行聚类,那么您可能应该将聚类应用于趋势,而不是原始值。例如,将每条曲线标准化为均值 0 和标准差 1。然后计算一个值与下一个值的差异,然后将聚类应用于此预处理数据!

      【讨论】:

      • 这与@joran 的提议有什么不同吗?我可能看不出区别
      • 刚刚阅读了他的回答:不,这并没有本质上的不同。我建议使用不同的缩放比例。但是,我要指出的重点是,这属于预处理的重要步骤,您不能忽视。这就是为什么总是有很多关于 KDD 过程的讨论:en.wikipedia.org/wiki/Data_mining#Process 这是实际采矿中 90% 的努力,最多是科学成果的 5%,它专注于新算法。
      【解决方案3】:

      这个问题可能更适合 stats.stackexchange.com,但无论如何这里有一个解决方案。

      您的问题实际上是“我如何选择正确的距离度量?”。您需要一个衡量趋势相似性的距离,而不是这些向量之间的欧几里得距离。

      这是一种选择:

      a1 <- t(apply(a,1,scale))
      a2 <- t(apply(a1,1,diff))
      
      cl <- clara(a2,2)
      matplot(t(a),type="b", pch=20, col=cl$clustering) 
      

      我没有定义新的距离度量,而是通过转换数据完成了基本相同的事情。首先缩放每一行,以便我们可以比较相对趋势,而不会因规模差异而让我们失望。接下来,我们只是将数据转换为差异。

      警告:这不一定适用于所有“趋势”数据。特别是,观察连续的差异只能捕捉到“趋势”的一个单一的、有限的方面。您可能需要考虑更复杂的指标。

      【讨论】:

        猜你喜欢
        • 2015-07-03
        • 2016-01-10
        • 2012-11-26
        • 2019-04-04
        • 2015-09-22
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多