2012-05-11 18 views
5

I k-medoids nel Clara() funzione utilizza distanza per formare gruppi in modo da ottenere questo schema:Come raggruppare per trend invece che per distanza 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()

Ma io voglio trovare un metodo di clustering che assegna un cluster per ogni linea secondo la sua tendenza, quindi le linee 1, 2 e 3 appartengono a un cluster e le linee 4 e 5 a un altro.

risposta

5

Questa domanda potrebbe essere più adatta a stats.stackexchange.com, ma questa è comunque una soluzione.

La tua domanda è in realtà "Come scegliere la metrica della distanza giusta?". Invece della distanza euclidea tra questi vettori, vuoi una distanza che misuri la somiglianza nella tendenza.

Ecco una sola opzione:

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

Invece di definire una nuova distanza metrica, ho compiuto essenzialmente la stessa cosa, trasformando i dati. Prima ridimensionare ogni riga, in modo da poter confrontare le tendenze relative senza differenze di scala che ci buttano fuori. Successivamente, convertiamo semplicemente i dati in differenze.

Attenzione: questo è non necessariamente funzionante per tutti i dati di "tendenza". In particolare, guardando le differenze successive si coglie solo un aspetto della "tendenza" limitato. Potrebbe essere necessario mettere un po 'di pensiero in metriche più sofisticate.

2

Fare più pre-elaborazione. Per qualsiasi data mining, la pre-elaborazione è il 90% dello sforzo.

Ad esempio, se si desidera raggruppare in base alle tendenze, è possibile che si debba applicare il clustering alle tendenze e non ai valori non elaborati. Ad esempio, standardizzate le curve a una media di 0 e una deviazione standard di 1. Quindi calcolate le differenze da un valore a quello successivo, quindi applicate il clustering a questi dati preelaborati!

+0

È diverso da ciò che @joran ha proposto? Potrei non vedere la differenza – nachocab

+0

Dopo aver letto la sua risposta: no, non è sostanzialmente diverso. Sto suggerendo un diverso ridimensionamento. Tuttavia, il punto chiave che volevo sottolineare è che questo appartiene al passaggio importante del pre-elaborazione che non devi trascurare. Ecco perché c'è sempre così tanto parlare del processo di KDD: https://en.wikipedia.org/wiki/Data_mining#Process È il 90% dello sforzo nel settore minerario reale, è il 5% dei risultati scientifici al massimo, che concentrarsi su nuovi algoritmi. –

Problemi correlati