Clustering

Plot del dataframe completo:

Plot del dataframe senza duplicati:

Valutazione cluster

Elbow’s Method

Voglio valutare il numero di cluster esaminando il grafico dell’elbow method utilizzando il K-Means e il K-Means++.

I parametri del Kmeans sono:

  1. init=‘random’ : i centroidi vengono posizionati in maniera casuale
  2. n_init=10 : l’algoritmo di clustering viene eseguito 10 volte in maniera indipendente con posizione random dei centroidi e viene scelto quello che riporta il valore più basso del SSE.
  3. max_iter=300: numero massimo di iterazioni per ogni run
#valori unici
distrotions = []
for i in range(1,11):
    km = KMeans(n_clusters=i, init='random', n_init=10, max_iter=300, random_state=0)
    km.fit(np.nan_to_num(df1))
    distrotions.append(km.inertia_)
plt.plot(range(1,11), distrotions, marker='o')
plt.title("Elbow K-Means")
plt.xlabel('Number Clusters')
plt.ylabel('Distortions')
plt.show()

I parametri del Kmeans++ sono:

  1. init=‘k-means++’ : i centroidi vengono posizionati uno lontano dall’altro
  2. n_init=10 : l’algoritmo di clustering viene eseguito 10 volte in maniera indipendente con posizione random dei centroidi e viene scelto quello che riporta il valore più basso del SSE.
  3. max_iter=300: numero massimo di iterazioni per ogni run
distrotions = []
for i in range(1,11):
    km = KMeans(n_clusters=i, init='k-means++', n_init=10, max_iter=300, random_state=0)
    km.fit(np.nan_to_num(df1))
    distrotions.append(km.inertia_)
plt.plot(range(1,11), distrotions, marker='o')
plt.title("Elobow K-Means++")
plt.xlabel('Number Clusters')
plt.ylabel('Distortions')
plt.show()

Grafici:

Elbow Kmeans data frame completo

Elbow Kmeans++ data frame completo

Eseguiamo gli stessi algoritmi per il dataframe con i valori unici:

Elbow Kmeans data frame con valori non duplicati

Elbow Kmeans++ data frame con valori non duplicati

Da entrmabi i grafici sembrerebbe che il numero migliore di cluster sia 4.

Grafico dei cluster con centroidi:

Silhouette analysis

Un altro metodo per verificare i centrodi migliori è la silhouette analysis. (N.B. questa analisi è applicabile solamente per il dataframe con valori unici. Il dtaframe originale è troppo grande)

Il valore ricavato dalla Silhouette analysis è una misura di quanto i samples sono strettamente raggruppati. La misura varia tra −1 e +1. Un alto valore indica che gli oggetti in quel cluster sono rappresentativi e non hanno match con i cluster vicini. Se la maggior parte dei samples ha valori alti allora la configurazione dei cluster è buona.

La Silhouette analysis è stata eseguita per 6 cluster:

I l’average della Silhouette measure per ogni cluster è la seguente:

  • For n_clusters = 2 The average silhouette_score is : 0.6300256321190757
  • For n_clusters = 3 The average silhouette_score is : 0.6685810398817306
  • For n_clusters = 4 The average silhouette_score is : 0.5583733087104827
  • For n_clusters = 5 The average silhouette_score is : 0.6289889606227129
  • For n_clusters = 6 The average silhouette_score is : 0.5505788925136789

Grafici (la dotted line rappresenta l’average della misura):

Upside-down sloths are so cute Upside-down sloths are so cute Upside-down sloths are so cute Upside-down sloths are so cute

Dai grafici sembrebbe che la migliore configurazione dei cluster è quella con 3 centroidi.

Grafico cluster: