Come decidere il numero corretto di cluster?


54

Troviamo i centri del cluster e assegniamo punti a k ​​diversi bin del cluster nel clustering k-mean che è un algoritmo molto noto e si trova quasi in ogni pacchetto di machine learning in rete. Ma la parte mancante e più importante secondo me è la scelta di un k corretto. Qual è il miglior valore per questo? E cosa si intende per migliore ?

Uso MATLAB per il calcolo scientifico in cui viene dato uno sguardo alle trame di silhouette come un modo per decidere su k discusso qui . Tuttavia, sarei più interessato agli approcci bayesiani. Eventuali suggerimenti sono apprezzati.


2
Bella domanda ...


Sotto visualization-for-clustering c'è (ahem) un modo per immaginare k-cluster e vedere l'effetto di vari k in un colpo solo, usando gli MST.
denis

Ho risposto a questa domanda con i metodi di una mezza dozzina in Rpiù di qui
Ben

1
Decidere il "migliore" numero di cluster implica il confronto di soluzioni di cluster con differenti k - quale soluzione è "migliore". A questo proposito, l'attività appare simile a come confrontare i metodi di clustering , il che è "migliore" per i tuoi dati. Le linee guida generali sono qui .
ttnphns

Risposte:


28

Questo è stato chiesto un paio di volte su StackOverflow: qui , qui e qui . Puoi dare un'occhiata a ciò che la folla laggiù pensa a questa domanda (o una sua piccola variante).

Vorrei anche copiare la mia risposta a questa domanda, su stackoverflow.com:

Sfortunatamente non c'è modo di impostare automaticamente il "giusto" K né esiste una definizione di "giusto". Non esiste un metodo statistico di principio, semplice o complesso che possa impostare la "K giusta". Ci sono euristiche, regole empiriche che a volte funzionano, a volte no.

La situazione è più generale in quanto molti metodi di clustering hanno questo tipo di parametri e penso che questo sia un grosso problema aperto nella comunità di ricerca sull'apprendimento clustering / senza supervisione.


+1 Dopo aver letto questo, mi sembra così intuitivo .... ma devo dire che non ci avevo mai pensato prima. che in realtà il problema di scegliere il numero di PC in PCA equivale al problema di scegliere il numero di cluster in K-mean ...
Dov

2
@Dov queste due cose non sono del tutto equivalenti. Esistono misure specifiche che possono essere utilizzate per esaminare la qualità di una soluzione PCA (in particolare errore di ricostruzione, ma anche% di varianza rilevata, ecc.) E queste tendono ad essere (principalmente) coerenti. Tuttavia, nel clustering spesso non esiste una "risposta corretta": un cluster può essere migliore di un altro di una metrica e il contrario può essere vero utilizzando un'altra metrica. E in alcune situazioni due cluster diversi potrebbero essere ugualmente probabili con la stessa metrica.
TCD

@tdc ma non è così en.wikipedia.org/wiki/… è più o meno simile a questo miglioramentooutcomes.com/docs/WebSiteDocs/PCA/… ?
Dov

2
@Dov Sì, sono "più o meno" l'uno come l'altro, ma stavo semplicemente dicendo che il problema di scegliere il numero di cluster è molto più complicato rispetto alla scelta del numero di PC - cioè non sono "equivalenti".
martedì

1
+1 Hai ragione. In un certo senso introduciamo qualche altro modello o ipotesi per decidere il miglior k, ma poi la domanda si rivela perché è quel modello o presupposto il migliore ...
petrichor,

19

Innanzitutto un avvertimento. Nel clustering spesso non esiste una "risposta corretta": un cluster può essere migliore di un altro di una metrica e il contrario può essere vero usando un'altra metrica. E in alcune situazioni due cluster diversi potrebbero essere ugualmente probabili con la stessa metrica.

Detto questo, potresti voler dare un'occhiata ai processi di Dirichlet . Vedi anche questo tutorial .

Se inizi con un modello di miscela gaussiana, hai lo stesso problema con k-medie: devi scegliere il numero di cluster. È possibile utilizzare prove modello, ma in questo caso non sarà affidabile. Quindi il trucco è usare un processo Dirichlet prima dei componenti della miscela, che quindi ti permette di avere un numero potenzialmente infinito di componenti della miscela, ma il modello (di solito) troverà automaticamente il numero "corretto" di componenti (sotto le ipotesi di il modello).

αα


1
Un processo di Dirichlet con quale parametro di concentrazione? È un po 'equivalente alla stessa domanda originale, k-significa sotto quale k? Anche se concordo sul fatto che comprendiamo meglio la distribuzione di Direchlet che il comportamento di alcuni algoritmi complessi su alcuni dati del mondo reale.
carlosdc,

@carlosdc buon punto, ho aggiornato la risposta per includere un po 'di discussione sul parametro di concentrazione
tdc

1
Nella mia esperienza è molto più facile apprendere un parametro di concentrazione a valore continuo come l'alfa piuttosto che determinare il numero di cluster in un modello di miscela finito. Se vuoi attaccare con un modello di miscela finito e prendere una virata bayesiana, c'è un salto reversibile MCMC ( onlinelibrary.wiley.com/doi/10.1111/1467-9868.00095/abstract )

1
Bella risposta. Aggiungerei il documento Revisiting K-Means: New Algorithms via Bayesian Nonparametrics . Il che fornisce un semplice approccio "continuo" a K-Means. Quindi è facile, usando l'ottimizzazione, trovare il valore ottimale.
Royi,

9

Uso il metodo Elbow :

  • Inizia con K = 2 e continua ad aumentarlo in ogni passaggio di 1, calcolando i cluster e i costi associati alla formazione. A un certo valore per K il costo diminuisce drasticamente e successivamente raggiunge un plateau quando lo si aumenta ulteriormente. Questo è il valore K che desideri.

La logica è che dopo questo, si aumenta il numero di cluster, ma il nuovo cluster è molto vicino a quello esistente.


Sembra che sia il principio valutato dal metodo L (vedi la mia risposta).
vinto il

6

Le dimensioni del cluster dipendono fortemente sia dai dati che dagli scopi per cui verranno utilizzati. Se stai usando i tuoi dati per dividere le cose in categorie, prova a immaginare quante categorie vuoi prima. Se è per la visualizzazione dei dati, rendilo configurabile, in modo che le persone possano vedere sia i cluster di grandi dimensioni che quelli più piccoli.

Se è necessario automatizzarlo, è possibile che si desideri aggiungere una penalità all'aumento di k e calcolare il cluster ottimale in quel modo. E poi pesi solo k a seconda che tu voglia una tonnellata di cluster o ne desideri pochissimi.



5

Sono riuscito a utilizzare il "Metodo L" per determinare il numero di cluster in un'applicazione geografica (cioè, essenzialmente un problema 2d sebbene tecnicamente non euclideo).

Il metodo L è descritto qui: Determinazione del numero di cluster / segmenti negli algoritmi di cluster / segmentazione gerarchici Stan Salvador e Philip Chan

Essenzialmente questo valuta l'adattamento per vari valori di k. Un grafico a "L" è visto con il valore k ottimale rappresentato dal ginocchio nel grafico. Un semplice calcolo di adattamento dei minimi quadrati a doppia linea viene utilizzato per trovare il punto del ginocchio.

Ho trovato il metodo molto lento perché i k-media iterativi devono essere calcolati per ogni valore di k. Inoltre ho scoperto che k-mean ha funzionato meglio con più corse e scegliendo il migliore alla fine. Sebbene ogni punto dati avesse solo due dimensioni, non era possibile utilizzare una semplice distanza pitagorica. Quindi è un sacco di calcoli.

Un pensiero è di saltare ogni altro valore di k (diciamo) a metà dei calcoli e / o ridurre il numero di iterazioni di k-significati, e quindi attenuare leggermente la curva risultante per produrre un adattamento più accurato. Ho chiesto a questo proposito su StackOverflow - IMHO, la domanda di smoothing rimane una domanda di ricerca aperta.


4

k

Ma cosa succede se il tuo set di dati non si adatta effettivamente allo schema Voronoi?

kk

k


3
Sebbene la descrizione di K-significhi nel primo paragrafo non sia sbagliata, può fuorviare alcune persone a equiparare questo metodo al partizionamento Voronoi basato sui dati originali. Non è così: la partizione si basa sulle posizioni dei mezzi del cluster, che potrebbero non coincidere (e di solito non) con nessuno dei dati originali.
whuber

3

Nel complesso, è possibile scegliere il numero di cluster in due percorsi diversi.

  1. guidato dalla conoscenza: dovresti avere alcune idee su quanti cluster hai bisogno dal punto di vista aziendale. Ad esempio, stai raggruppando i clienti, dovresti chiederti, dopo aver ottenuto questi clienti, cosa dovrei fare dopo? Potresti avere un trattamento diverso per diversi cluster? (ad es. pubblicità via email o telefono). Quindi quanti trattamenti possibili stai pianificando? In questo esempio, selezioni che 100 cluster non avranno molto senso.

  2. Dati guidati: un numero maggiore di cluster è insufficiente e un numero inferiore di cluster è insufficiente. È sempre possibile dividere i dati a metà ed eseguire la convalida incrociata per vedere il numero di cluster validi. Nota, nel clustering hai ancora la funzione di perdita, simile all'impostazione supervisionata.

Infine, dovresti sempre combinare conoscenze guidate e dati guidati insieme nel mondo reale.


2

Dato che nessuno lo ha ancora indicato, ho pensato di condividere questo. Esiste un metodo chiamato X-medie, ( vedi questo link ) che stima il numero corretto di cluster usando il criterio di informazione bayesiana (BIC). In sostanza, sarebbe come provare K significa con K diversi, calcolare BIC per ogni K e scegliere il K. migliore Questo algoritmo lo fa in modo efficiente.

C'è anche un'implementazione di weka , i cui dettagli sono disponibili qui .


0

Un altro approccio consiste nell'utilizzare un algoritmo evolutivo i cui individui hanno cromosomi di diversa lunghezza. Ogni individuo è una soluzione candidata: ognuno porta le coordinate dei centroidi. Il numero di centroidi e le loro coordinate vengono evoluti al fine di raggiungere una soluzione che fornisce il miglior punteggio di valutazione del clustering.

Questo documento spiega l'algoritmo.

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.