Inizializzazione di centri K-media mediante sottocampioni casuali del set di dati?


13

Se ho un determinato set di dati, quanto sarebbe intelligente inizializzare i centri di cluster usando i campioni casuali di quel set di dati?

Ad esempio, supponiamo che io voglia 5 clusters. Prendo 5 random samplesdi dire, size=20%del dataset originale. Potrei quindi prendere la media di ciascuno di questi 5 campioni casuali e usare quei mezzi come i miei 5 centri di cluster iniziali? Non so dove ho letto questo, ma volevo sapere cosa ne pensate dell'idea.


AGGIORNAMENTO: Vedi questa discussione Inizializzazione del clustering dei mezzi K: quali sono i metodi esistenti? per la discussione generale sui vari metodi di inizializzazione.


11
Se dividi casualmente il campione in 5 sottocampioni, i tuoi 5 mezzi quasi coincideranno. Qual è il senso di rendere così vicini i centri dei cluster iniziali? Nella maggior parte delle implementazioni di K-medie, la selezione predefinita dei centri di cluster iniziali si basa sull'idea opposta: trovare i 5 punti più distanti e renderli i centri iniziali.
ttnphns,

2
@ttnphns Questa sarebbe una bella risposta.

2
Penso che sarebbe molto meglio scegliere la media complessiva come un punto e scegliere altri che sono lontani da quel centro in varie direzioni.
Michael R. Chernick,

1
Ha senso. Come potrei andare in giro per trovare questi 5 punti che sono distanti? Grazie!
JEquihua

@JEquihua, ho pubblicato il mio commento come risposta e ho aggiunto i dettagli che stai richiedendo.
ttnphns,

Risposte:


16

Se casualmente il campione in 5 sottocampioni, i tuoi 5 mezzi quasi coincideranno. Qual è il senso di rendere così vicini i centri dei cluster iniziali?

In molte implementazioni di K-medie, la selezione predefinita dei centri di cluster iniziali si basa sull'idea opposta: trovare i 5 punti più distanti e renderli i centri iniziali. Potresti chiedere quale potrebbe essere il modo di trovare quei punti distanti? Ecco cosa sta facendo SP-K-mean per questo:

Prendi i k casi (punti) del set di dati come centri iniziali. Tutti gli altri casi vengono verificati per la possibilità di sostituire quelli come centri iniziali, alle seguenti condizioni:

  • a) Se il caso è più lontano dal centro più vicino ad esso rispetto alla distanza tra i due più vicini gli uni agli altri centri, il caso sostituisce quel centro degli ultimi due a cui è più vicino.
  • b) Se il caso è più lontano dal centro 2 ° più vicino ad esso della distanza tra il centro più vicino ad esso e il centro più vicino a quest'ultimo, il caso sostituisce il centro più vicino ad esso.

Se la condizione (a) non è soddisfatta, la condizione (b) è controllata; se non è soddisfatto, il caso non diventa un centro. Come risultato di tali casi, si ottengono k casi nel cloud che diventano i centri iniziali. Il risultato di questo algoritmo, sebbene abbastanza robusto, non è completamente insensibile alla scelta iniziale di "eventuali k casi" e all'ordinamento dei casi nel set di dati; quindi, molti tentativi di avvio casuali sono ancora ben accetti, come sempre nel caso di K-medie.

Vedi la mia risposta con un elenco di metodi di inizializzazione popolari per k-mean. Anche il metodo di suddivisione in sottocampioni casuali (criticato qui da me e da altri) così come il metodo descritto utilizzato da SPSS - sono nell'elenco.


1
Una volta fatto ciò che descrivi, quale statistica posso usare per determinare quale punto di inizializzazione porta a una partizione migliore? Grazie per tutto.
JEquihua,

L'uso dei punti massimi come centri iniziali una volta non garantisce di ottenere la migliore partizione alla fine, ritenendo che (rispetto ai centri iniziali casuali) diminuisca la possibilità di rimanere intrappolati in un "ottimale locale" e accelerare il processo di convergenza . Variando l'ordine dei casi, esegui l'intera partizione k- medie 2-5 volte, salva i centri finali ottenuti, calcolali nella media e inseriscili come quelli iniziali per una clusterizzazione finale. Questa partizione è sicuramente la migliore. In realtà non è necessaria alcuna statistica speciale per verificarlo, a meno che non si confronteranno partizioni di k diversi .
ttnphns,

1
Voglio confrontare partizioni di diversi k. Cosa potrei usare? Qual è una buona idea? grazie per avermi aiutato così tanto. @ttnphns.
JEquihua,

Esiste un gran numero di criteri di raggruppamento "interni" . Uno dei più appropriati per i k-media è Calinski-Harabasz (F multivariata di Fisher). Google per esso o per altri.
ttnphns,

7

I mezzi saranno troppo simili. Puoi anche trovare la media del set di dati, quindi posizionare i centroidi iniziali in un piccolo cerchio / sfera attorno a questa media.

Se vuoi vedere qualche altro schema di inizializzazione del suono per k-mean, dai un'occhiata a k-means ++. Hanno escogitato un metodo abbastanza intelligente per seminare k-medie.

  • Arthur, D. e Vassilvitskii, S. (2007).
    k-mean ++: i vantaggi di un'attenta semina ".
    Atti del diciottesimo simposio annuale ACM-SIAM su algoritmi discreti

Diapositive dell'autore: http://www.ima.umn.edu/~iwen/REU/BATS-Means.pdf


Ho letto questo, sembra abbastanza intuitivamente vantaggioso, ma penso che debba ancora essere dimostrato che funziona meglio del semplice prendere molti punti di inizializzazione casuali. Ho trovato questo semplice codice nel caso tu voglia provarlo: kmpp <- function (X, k) {n <- nrow (X) C <- numeric (k) C [1] <- sample (1: n, 1) per (i in 2: k) {dm <- distmat (X, X [C,]) pr <- applica (dm, 1, min); pr [C] <- 0 C [i] <- campione (1: n, 1, prob = pr)} kmeans (X, X [C,])}
JEquihua

È noto per ridurre significativamente il numero di iterazioni fino alla convergenza e produrre risultati in media migliori. Posso confermare che nei miei esperimenti, kmeans ++ è la strada da percorrere. Sto usando l'implementazione ELKI.
Ha QUIT - Anony-Mousse il

Cos'è l'implementazione ELKI? dove posso cercarlo? saluti!
JEquihua,


4

L'uso di campioni casuali ti darà l'opposto di ciò di cui hai bisogno, come ha sottolineato ttnphns nel suo commento. Ciò di cui avremmo bisogno è un modo per trovare punti dati abbastanza distanti tra loro.

Idealmente, potresti iterare su tutti i punti, trovare le distanze tra loro, determinare dove sono le distanze più grandi ...

Non per eludere l'intenzione del PO, ma penso che la "soluzione" sia integrata nell'algoritmo k-mean. Eseguiamo più iterazioni e ricalcoliamo i centroidi del cluster in base alle iterazioni precedenti. Solitamente eseguiamo anche l'algoritmo kmeano più volte (con valori iniziali casuali) e confrontiamo i risultati.

Se uno ha una conoscenza a priori , conoscenza del dominio, ciò potrebbe portare a un metodo superiore per identificare dove dovrebbero essere i centri di cluster iniziali. Altrimenti, probabilmente si tratta di selezionare punti di dati casuali come valori iniziali e quindi utilizzare più esecuzioni e più iterazioni per esecuzione.


Una volta fatto ciò che descrivi, quale statistica posso usare per determinare quale punto di inizializzazione porta a una partizione migliore? Grazie per tutto.
JEquihua,

2

Le risposte proposte sono tutte efficaci, ma sono molto più difficili da rendere operative rispetto alla proposta originale. Un modo molto semplice per inizializzare è prendereKosservazioni casuali come punti originali. La probabilità di chiudere due punti iniziali è piuttosto bassa e l'algoritmo viene eseguito rapidamente per tutti tranne i casi più estremi.


Ha molto senso. Potrei chiederti la stessa cosa che ho chiesto ad Aman. Supponiamo che prenda miliardi di punti iniziali casuali. Cosa potrei usare per determinare quale delle partizioni risultanti è la migliore? Saluti! @gmacfarlane
JEquihua

Tipicamente, K- significa che gli algoritmi ripetono fino a quando l'errore quadratico medio (o errore assoluto medio) viene minimizzato e stabile tra le iterazioni. In ogni dato set di dati, ci sarà un numero finito di combinazioni che minimizzano veramente questo MSE. Quindi un milione di esecuzioni produrranno probabilmente tra uno e dieci schemi di partizione (a seconda della stranezza dei tuoi dati), e sceglierei quello che aveva il MSE più basso tra tutti i gruppi.
gregmacfarlane,

Dovrei notare che se le tue partizioni sono altamente sensibili alla selezione dei punti iniziali, significa che i tuoi dati non hanno cluster naturali e un K- l'algoritmo di clustering potrebbe non essere la cosa migliore da usare. Oppure, stai cercando di adattare più cluster rispetto ai dati naturalmente presenti.
gregmacfarlane,
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.