Ho imparato che quando si sceglie un numero di cluster, si dovrebbe cercare un punto a gomito per diversi valori di K. Ho tracciato i valori di withinss per valori di k da 1 a 10, ma non vedo un chiaro gomito. Cosa fai in un caso come questo?

Ho imparato che quando si sceglie un numero di cluster, si dovrebbe cercare un punto a gomito per diversi valori di K. Ho tracciato i valori di withinss per valori di k da 1 a 10, ma non vedo un chiaro gomito. Cosa fai in un caso come questo?

Risposte:
Forse stai usando l'algoritmo sbagliato per il tuo problema.
K-means è altamente sensibile alla preelaborazione. Se un attributo è su una scala molto più grande degli altri, dominerà l'output. L'output sarà quindi effettivamente monodimensionale
Qualunque cosa tu faccia, devi convalidare i tuoi risultati con qualcosa di diverso da iniziare da un numero come SSQ. Invece, considera la visualizzazione .
La visualizzazione può anche dirti che forse c'è solo un singolo cluster nei tuoi dati.
Un modo è ispezionare manualmente i membri nei cluster per verificare se un gruppo specifico ha senso (sono distinguibili?). Questo può essere fatto tramite tabelle di contingenza e mezzi condizionali. Fallo per una varietà di k e puoi determinare quale valore è appropriato.
Un modo meno soggettivo è usare il valore Silhouette:
/programming/18285434/how-do-i-choose-k-when-using-k-means-clustering-with-silhouette-function
Questo può essere calcolato con il tuo pacchetto software preferito. Dal link:
Questo metodo confronta solo la somiglianza all'interno del gruppo con la somiglianza del gruppo più vicino. Se la distanza media di un membro di dati rispetto ad altri membri dello stesso cluster è superiore alla distanza media di altri membri del cluster, questo valore è negativo e il clustering non ha esito positivo. D'altra parte, i valori di silhuette vicini a 1 indicano un'operazione di clustering riuscita. 0,5 non è una misura esatta per il clustering.
contingency tables and conditional meansQuesto è ulteriormente mistico. Cosa devo fare con loro per arrivare "soggettivamente" a un buon k?
In generale, puoi considerare:
Possiamo usare il pacchetto NbClust per trovare il valore ottimale di k. Fornisce 30 indici per determinare il numero di cluster e propone il miglior risultato.
NbClust (data = df, distance = "euclidean", min.nc = 2, max.nc = 15, method = "kmeans", index = "all")