2012-05-11 31 views
5

第k中心点划分在克拉拉()函数使用距离形成簇,所以我得到这种模式:如何用趋势而不是按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) 
cl <- clara(a,2) 
matplot(t(a),type="b", pch=20, col=cl$clustering) 

clustering by clara()

但我想找到分配一个群集于每行一个聚类方法根据它的趋势,第1,2和3行属于一个集群,第4行和第5行属于另一集群。

回答

5

这个问题可能更适合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) 

enter image description here

而不是定义一个新的距离度量的,我已经基本上通过转换数据来完成同样的事情。首先对每一行进行缩放,以便我们可以比较相对趋势,而不会造成规模差异。接下来,我们只是将数据转换为差异。

警告:这是而不是必然会适用于所有“趋势”数据。特别是,看到连续的差异只能捕捉到“趋势”的一个有限的方面。您可能不得不考虑更复杂的指标。

2

做得更多预处理。对于任何数据挖掘来说,预处理是90%的努力。

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

+0

这与@joran提出的有何不同?我可能没有看到差异 – nachocab

+0

刚读完他的回答:不,这并没有太大的不同。我建议采用不同的缩放比例。 但是,我想指出的重点是,这属于预处理的重要步骤,您不能忽视。这就是为什么总是谈论KDD过程的原因:https://en.wikipedia.org/wiki/Data_mining#Process 这是实际开采中90%的努力,最多只有5%的科学结果,专注于新算法。 –