2010-01-12 12 views
7

Assumere un gruppo di punti di dati, come ad esempio uno tracciata qui (questo grafico non è specifico per il mio problema, ma solo usato come un esempio adatto):rilevazione Gruppo nel set di dati

Ispezione il grafo di dispersione visivamente, è abbastanza ovvio che i punti di dati formino due "gruppi", con alcuni punti casuali che ovviamente non appartengono a nessuno dei due.

Sto cercando un algoritmo, che mi avrebbe permesso di:

  • avvio con un set di dati di due o più dimensioni.
  • rilevare tali gruppi dal set di dati senza previa conoscenza su quanti (o eventuali) potrebbero essere lì
  • una volta che i gruppi sono stati rilevati, 'chiedere' il modello di gruppi, se un nuovo punto di campionamento sembra adattarsi a uno qualsiasi dei gruppi

risposta

5

Ci sono molte scelte, ma se sei interessato alla probabilità che un nuovo punto dati appartenga a una particolare miscela, utilizzerei un approccio probabilistico come la modellizzazione della miscela gaussiana stimata dalla massima verosimiglianza o Bayes.

Stima di massima verosimiglianza di mixtures models is implemented in Matlab.

L'esigenza che il numero di componenti sia sconosciuto rende il modello più complesso. L'approccio probabilistico dominante consiste nel porre un processo di Dirichlet prima sulla distribuzione della miscela e sulla stima con un metodo bayesiano. Ad esempio, vedi this paper on infinite Gaussian mixture models. Il modello di miscela DP ti fornirà un'inferenza sul numero di componenti e sui componenti a cui ogni elemento appartiene, che è esattamente quello che desideri. In alternativa, è possibile eseguire la selezione del modello sul numero di componenti, ma in genere è meno elegante.

Ci sono molte implementazioni di modelli di modelli di miscelazione DP, ma potrebbero non essere altrettanto convenienti. Ad esempio, ecco uno Matlab implementation.

Il tuo grafico ti suggerisce di essere un utente R. In questo caso, se stai cercando soluzioni preconfezionate, la risposta alla tua domanda si trova su questo Task View for cluster analysis.

3

Penso che stiate cercando qualcosa sulla falsariga di uno k-means clustering algorithm.

Si dovrebbe essere in grado di trovare implementazioni adeguate nella maggior parte delle lingue di uso generale.

2

È necessario uno degli algoritmi di clustering. Tutti possono essere divisi in 2 gruppi:

  1. si Inserisci il numero di gruppi (clusters) - 2 cluster nel tuo esempio
  2. algoritmo di cercare di indovinare il numero corretto di cluster di per sé

Se vuoi algoritmo di 1 ° tipo, quindi K-Means è ciò di cui hai veramente bisogno.

Se si desidera un algoritmo di secondo tipo, è probabile che sia necessario uno degli algoritmi di clustering gerarchico. Non ho mai implementato nessuno di loro. Ma vedo un modo semplice per migliorare K-means in modo tale che non sarà necessario specificare il numero di cluster.

Problemi correlati