2012-05-11 88 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%的科學結果,專注於新算法。 –