2009-05-06 9 views
9

Qualcuno conosce un buon algoritmo per eseguire il clustering su attributi discreti e continui? Sto lavorando su un problema di identificazione di un gruppo di clienti simili e ogni cliente ha attributi discreti e continui (tipo di clienti, quantità di entrate generate da questo cliente, posizione geografica ecc.)Algoritmo di clustering con attributi discreti e continui?

Tradizionalmente algoritmo come K-means o EM funzionano per attributi continui, e se abbiamo un mix di attributi continui e discreti?

risposta

5

Se ricordo correttamente, l'algoritmo COBWEB potrebbe funzionare con attributi discreti.

E puoi anche fare diversi 'trucchi' per gli attributi discreti al fine di creare metriche di distanza significative.

Si potrebbe google per il clustering di attributi categoriali/discreti, uno dei primi successi: ROCK: A Robust Clustering Algorithm for Categorical Attributes.

0

Si potrebbe anche guardare affinity propagation come una possibile soluzione. Ma per superare il dilemma continuo/discreto è necessario definire una funzione che valuti gli stati discreti.

0

In realtà vorrei presentare coppie di attributi discreti agli utenti e chiedere loro di definire la loro vicinanza. Li presenteresti con una scala che va da [sinonimo..molto straniero] o simili. Avendo fatto fare a molte persone questo si ritroverà con una funzione di prossimità ampiamente accettata per i valori degli attributi non lineari.

1

R è un ottimo strumento per il clustering: l'approccio standard consiste nel calcolare una matrice di dissimilarità sui dati misti utilizzando daisy, quindi il clustering con quella matrice utilizzando agnes.

cba module on CRAN include una funzione di cluster su predittori binari basata su ROCK.

0

Che ne dici di trasformare ciascuno degli attributi categoriali in una serie di attributi di indicatori binari N-1 (dove N è il numero di categorie)? Non dovresti avere paura dell'elevata dimensionalità, poiché è possibile utilizzare una rappresentazione sparsa (come ad esempio il mahout SequentialAccessSparseVector). Una volta fatto, puoi usare un classico K-means o qualsiasi altro algoritmo di clustering numerico standard.