Clustering dei dati 1D


16

Ho un set di dati, voglio creare cluster su quei dati in base a una sola variabile (non ci sono valori mancanti). Voglio creare 3 cluster basati su quella variabile.

Quale algoritmo di clustering usare, k-mean, EM, DBSCAN ecc.?

La mia domanda principale è: in quali circostanze dovrei usare k-mean su EM o EM su k-mean?


1
L'algoritmo EM è uno strumento di uso generale per la stima della massima verosimiglianza con dati mancanti - puoi essere più specifico su come sia un "algoritmo di clustering"?
Macro

Sto usando weka come strumento e, sotto l'algoritmo di clustering, EM è elencato come algoritmo. Mi dispiace per la domanda scadente, sono nuovo nel data mining.
Ali,

So che l'algoritmo EM viene utilizzato per eseguire la stima della massima verosimiglianza per i modelli di variabili latenti (che possono essere considerati "dati mancanti") e le variabili latenti vengono spesso utilizzate per modellare il clustering. Forse questo è ciò che si intende.
Macro

@macro: potresti dare un'occhiata qui: stat.washington.edu/mclust per iniziare.
user603

3
Qual è lo scopo del clustering? Come per la maggior parte delle domande statistiche, esistono più risposte e conoscere lo scopo è una guida essenziale per selezionare quelle appropriate o valide.
whuber

Risposte:


11

L'algoritmo K-mean e l'algoritmo EM saranno abbastanza simili per il clustering 1D.

In K-significa che inizi con un'ipotesi in cui si trovano i mezzi e assegni ogni punto al cluster con la media più vicina, quindi ricalcoli i mezzi (e le varianze) in base alle assegnazioni correnti di punti, quindi aggiorni l'assegnazione dei punti, quindi aggiorni i significati ...

In EM inizieresti anche a indovinare dove si trovano le medie, quindi calcoli il valore atteso delle assegnazioni (essenzialmente la probabilità che ciascun punto si trovi in ​​ciascun cluster), quindi aggiorni le medie stimate (e le varianze) utilizzando i valori previsti come pesi, quindi calcolare i nuovi valori previsti, quindi calcolare i nuovi mezzi, ...

La differenza principale è che l'assegnazione di punti ai cluster in K-medie è un tutto o niente, in cui EM fornisce proporzioni / probabilità di appartenenza al gruppo (un punto può essere visto come avere l'80% di probabilità di essere nel gruppo A, il 18% di probabilità di essere nel gruppo B e probabilità del 2% di essere nel gruppo C). Se c'è molta separazione tra i gruppi, i 2 metodi daranno risultati abbastanza simili. Ma se c'è una buona quantità di sovrapposizioni, allora l'EM probabilmente darà risultati più significativi (ancora di più se la varianza / deviazione standard è di interesse). Ma se tutto ciò che ti interessa è assegnare l'appartenenza al gruppo senza preoccuparti dei parametri, allora K-medie è probabilmente più semplice.

Perché non fare entrambe le cose e vedere quanto sono diverse le risposte? se sono simili, procedi con quello più semplice, se sono diversi, decidi di confrontare il raggruppamento con i dati e le conoscenze esterne.


Grazie greg il tuo post ha aiutato, ho applicato entrambi e sembra che EM abbia generato cluster migliori di k-mean. (Penso che sia principalmente perché i dati che ho sono continui e non ci sono lacune). Sono un po 'confuso, poiché ho solo dati 1D, quindi dovrei probabilmente fare il binning per classificare i dati. Cosa pensi? Cosa intendi esattamente con parametri? Fa riferimento agli attributi di un'istanza? Grazie Ali
Ali

Hm EM da solo sembra essere insufficiente. È necessario un presupposto sulla distribuzione delle distribuzioni sottostanti della miscela.
tomka,

2

EM è migliore di k-significa in termini di risultati.

K-significa, tuttavia, ha un tempo di esecuzione più veloce.

Produrranno risultati simili se le matrici standard di deviazione / covarianza sono approssimativamente uguali. Se sospetti che ciò sia vero, usa k-medie.

DBSCAN viene utilizzato quando i dati non sono gaussiani. Se si utilizzano dati monodimensionali, ciò non è generalmente applicabile, poiché un'approssimazione gaussiana è generalmente valida in 1 dimensione.


0

Un altro modo semplice è fondamentalmente usare l'ordinamento dell'array 1D: cioè iterare su ogni punto e ottenere i valori che si trovano a una distanza minima da esso in entrambe le direzioni positiva e negativa. Per esempio:

data = [1,2,3,4,5,6,7,8,9,10,12]
k = 5
for a in data:
   print {'group': sorted(k, key=lambda n: abs(n-a))[0:k], 'point': a}

darà:

{'group': [1, 2, 3, 4, 5], 'point': 1}
{'group': [2, 1, 3, 4, 5], 'point': 2}
{'group': [3, 2, 4, 1, 5], 'point': 3}
{'group': [4, 3, 5, 2, 6], 'point': 4}
{'group': [5, 4, 6, 3, 7], 'point': 5}
{'group': [6, 5, 7, 4, 8], 'point': 6}
{'group': [7, 6, 8, 5, 9], 'point': 7}
{'group': [8, 7, 9, 6, 10], 'point': 8}
{'group': [9, 8, 10, 7, 6], 'point': 9}
{'group': [10, 9, 8, 12, 7], 'point': 10}
{'group': [12, 10, 9, 8, 7], 'point': 12}

Quali punti, che gli elementi vicini a un determinato punto sono sostanzialmente nel suo gruppo. L'unica cosa su cui riflettere in questa tecnica è la variabile k, che è la dimensione fissa del cluster :-).


-2

Se esiste solo una variabile, non è necessario il clustering. Puoi facilmente raggruppare le tue osservazioni in base alla distribuzione della variabile.

O mi sto perdendo alcuni punti qui?


5
Puoi fornire un esempio specifico di come raggruppare le osservazioni in base alla distribuzione della variabile?
Ali,

@ composer314: con un istogramma?
nico,

1
Mi dispiace, ma non sto ancora seguendo. Come posso usare un istogramma per raggruppare le osservazioni correlate? (Immagino che la domanda che potrei porre sia: come si trovano i blocchi all'interno di un istogramma? Sarebbe simile al picco picking spettrale?)
Ali

5
@composer Utilizzando l'istogramma o anche un kernel liscia dei dati è di solito non è un modo "facile" per cluster. Se vuoi andare in questo modo, devi adattare un modello di miscela finita . Se vuoi solo quello che potrebbe suggerire una visione casuale di un istogramma, usa i mezzi K (noto anche come metodo di Jenks , popolare tra i cartografi).
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.