Domanda

Supponiamo che un gruppo di punti dati, come uno tracciato qui (questo grafico non è specifico per il mio problema, ma solo usato come esempio adatto):

Ispezionando visivamente il grafico a dispersione, è abbastanza ovvio che i punti dati formano due "gruppi", con alcuni punti casuali che non appartengono ovviamente a nessuno dei due.

Sto cercando un algoritmo, che mi permetterebbe:

  • Inizia con un set di dati di due o più dimensioni.
  • rileva tali gruppi dal set di dati senza conoscenza preliminare su quanti (o se presenti) potrebbero esserci
  • Una volta rilevati i gruppi, "chiedi" al modello di gruppi, se un nuovo punto di campionamento sembra adattarsi a uno qualsiasi dei gruppi
È stato utile?

Soluzione

Ci sono molte scelte, ma se sei interessato alla probabilità che un nuovo punto dati appartenga a una particolare miscela, userei un approccio probabilistico come la modellazione di miscele gaussiana stimata dalla massima probabilità o da bayes.

Stima della massima verosimiglianza di I modelli di miscele sono implementati in MATLAB.

Il tuo requisito che il numero di componenti è sconosciuto rende il tuo modello più complesso. L'approccio probabilistico dominante è quello di posizionare un processo di Dirichlet prima della distribuzione della miscela e stimare con un metodo bayesiano. Ad esempio, vedi Questo documento su infiniti modelli di miscele gaussiana. Il modello di miscela DP ti darà un'inferenza sul numero di componenti e sui componenti a cui appartengono gli elementi, che è esattamente quello che vuoi. In alternativa è possibile eseguire la selezione del modello sul numero di componenti, ma questo è generalmente meno elegante.

Esistono molte implementazione dei modelli di modelli di miscele DP, ma potrebbero non essere così convenienti. Ad esempio, ecco un Implementazione di Matlab.

Il tuo grafico suggerisce che sei un utente R. In tal caso, se stai cercando soluzioni preconfezionate, la risposta alla tua domanda sta su questo Vista attività per l'analisi dei cluster.

Altri suggerimenti

Penso che tu stia cercando qualcosa sulla falsariga di a Algoritmo di clustering K-Means.

Dovresti essere in grado di trovare implementazioni adeguate nella maggior parte delle lingue per uso generale.

Hai bisogno di uno degli algoritmi di clustering. Tutti possono essere divulgati in 2 gruppi:

  1. Si specifica il numero di gruppi (cluster) - 2 cluster nel tuo esempio
  2. Algoritmo Prova a indovinare il numero corretto di cluster da solo

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

Se vuoi algoritmo di 2 ° tipo, probabilmente hai bisogno di uno degli algoritmi gerarchici di clustering. Non ne ho mai implementato nessuno. Ma vedo un modo semplice per migliorare i k-medi in questo modo, non sarà necessario specificare il numero di cluster.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top