2012-05-11 5 views
5

Die k-Medoide in der clara() Funktion verwendet Abstand Cluster zu bilden, so dass ich dieses Muster erhalten:Wie Cluster nach Trend statt nach Entfernung in 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()

Aber ich möchte eine Clustering-Methode zu finden, die jeder Zeile einen Cluster zuordnet Entsprechend seinem Trend gehören die Linien 1, 2 und 3 zu einem Cluster und die Linien 4 und 5 zu einem anderen.

Antwort

5

Diese Frage könnte besser zu stats.stackexchange.com passen, aber hier ist eine Lösung sowieso.

Ihre Frage ist eigentlich "Wie wähle ich die richtige Distanz Metrik?". Statt der euklidischen Entfernung zwischen diesen Vektoren möchten Sie eine Entfernung, die Ähnlichkeit im Trend misst.

Hier ist eine Option:

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

Statt eine neue Distanzmetrik definieren, ich habe im Wesentlichen das Gleiche erreicht, indem die Transformation der Daten. Zuerst skalieren wir jede Zeile, so dass wir relative Trends vergleichen können, ohne dass uns Unterschiede im Maßstab verursachen. Als nächstes konvertieren wir einfach die Daten in die Unterschiede.

Warnung: Dies ist nicht unbedingt für alle "Trend" -Daten arbeiten. Insbesondere betrachtet man aufeinanderfolgende Unterschiede nur als eine einzige, begrenzte Facette des "Trends". Sie müssen sich vielleicht etwas mehr Gedanken über anspruchsvollere Metriken machen.

2

Do more Vorverarbeitung. Für jedes Data Mining ist die Vorverarbeitung 90% des Aufwands.

Wenn Sie beispielsweise nach Trends gruppieren möchten, sollten Sie das Clustering möglicherweise auf die Trends und nicht auf die Rohwerte anwenden. Vereinheitlichen Sie zum Beispiel die Kurven jeweils auf einen Mittelwert von 0 und eine Standardabweichung von 1. Berechnen Sie dann die Differenzen von einem Wert zum nächsten und wenden Sie dann das Clustering auf diese vorverarbeiteten Daten an!

+0

Ist das anders aus, was @joran vorgeschlagen hat? Ich könnte den Unterschied nicht sehen – nachocab

+0

Nachdem ich gerade seine Antwort gelesen habe: Nein, es ist nicht wesentlich anders. Ich schlage eine andere Skalierung vor. jedoch der entscheidende Punkt, den ich wollte darauf hinweisen, dass dies auf den wichtigen Schritt der Vorverarbeitung gehört, dass man nicht vernachlässigen darf. Deshalb wird immer so viel über den KDD-Prozess geredet: https://en.wikipedia.org/wiki/Data_mining#Process Es sind 90% der Anstrengungen im realen Bergbau, es sind höchstens 5% der wissenschaftlichen Ergebnisse, die Fokus auf neue Algorithmen. –

Verwandte Themen