Punteggi silhouette
Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 8 di 51.
L’inerzia migliora sempre all’aumentare di k, quindi serve un gomito. La silhouette pone a ogni punto una domanda più equa: sono più vicino al mio gruppo che al gruppo successivo?
Un punto ottiene un punteggio (b - a) / max(a, b): vicino a 1 è ben inserito nel suo gruppo, vicino a 0 è al confine, sotto 0 è nel gruppo sbagliato. La media dei punteggi valuta un clustering:
from sklearn.metrics import silhouette_score
for k in [2, 3, 4]:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(X)
print(k, f"{silhouette_score(X, km.labels_):.3f}")Per le mele, stampa:
2 0.534
3 0.657
4 0.545Raggiunge il picco al valore ottimale di k, qui 3, dove i punti sembrano trovarsi più a loro agio.
Sfida
FacileDue previsori non sono d'accordo sul numero di tipi di tempesta che colpiscono la loro costa. Il codice iniziale contiene 150 tempeste, il vento di picco e la pioggia, e legge prima il k di Ana, poi quello di Ben.
- Calcola il punteggio di ciascun k usando il coefficiente silhouette, con 3 decimali.
- Stampa quale k si adatta meglio.
- Stampa il k migliore da 2 a 8, con il relativo punteggio.
Per un'altra costa:
Ana, k = 2: 0.512
Ben, k = 3: 0.574
Ben's k fits better
Best from 2 to 8: k = 3 (0.574)Provalo tu
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Non modificare le righe qui sotto
rng = np.random.default_rng(6)
# Quattro tipi di tempesta: vento e pioggia tipici e numero di tempeste per ciascun tipo
kinds = [(30, 8, 40), (12, 34, 35), (21, 21, 30), (11, 9, 45)]
parts = []
for w, r, n in kinds:
parts.append(np.column_stack([rng.normal(w, 2.5, n), rng.normal(r, 3, n)]))
# 150 tempeste su una costa, una per riga: velocità massima del vento (m/s) e pioggia (mm all'ora)
storms = np.round(np.concatenate(parts), 1)
# Il numero di tipi di tempesta secondo i due meteorologi
k_ana = int(input())
k_ben = int(input())
# Scrivi il tuo codice qui sotto
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento non supervisionato
1Trovare gruppi
Apprendimento senza etichetteMisurare la similaritàK-Means a manoK-Means in scikit-learnRiepilogo: iscritti alla palestra4Clustering gerarchico
Unire passo dopo passoModelli agglomerativiDendrogrammiRiepilogo: razze canine7PCA nella pratica
Vedere 64 dimensioniComponenti come schemiComprimere e ricostruirePCA prima di un modelloRiepilogo: scanner facciale10Progetto: Esplorare le cifre
Osserva le cifreRiduci con PCARaggruppa le cifreDai un nome ai gruppiTrova gli elementi insoliti2Scelta di k
InerziaIl metodo del gomitoPunteggi silhouetteScala prima del clusteringRiepilogo: zone di consegnaEsercitati da solo: Compilatore Python online