K-Means a mano
Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 3 di 51.
K-means ripete un round di due passaggi per trovare k cluster. Assegna: ogni punto si unisce al centro più vicino. Sposta: ogni centro si sposta sulla media dei suoi punti. Tre carretti dei gelati:
Un'iterazione in NumPy, dove dists è una tabella delle distanze con una colonna per centro:
labels = dists.argmin(axis=1) # assegna
for c in range(k):
centers[c] = X[labels == c].mean(axis=0) # spostaargmin(axis=1) restituisce la colonna più piccola di ogni riga: il suo centro più vicino. Giro dopo giro, i centri si stabilizzano; quando nessuno si sposta, k-means è terminato.
Sfida
FacileUn produttore di magliette adatta le taglie S, M e L ai clienti di oggi. La sua vecchia tabella delle taglie fornisce i centri iniziali, distances(people, centers) restituisce la tabella delle distanze e il programma legge quante iterazioni eseguire.
- A ogni iterazione: assegna ogni persona, poi sposta ogni centro.
- Stampa il centro di ogni taglia e quante persone ha ricevuto nell'ultima iterazione, come sotto.
Per un altro produttore:
Rounds run: 2
S: chest 87.3 cm, length 65.1 cm, 14 people
M: chest 95.0 cm, length 68.9 cm, 31 people
L: chest 104.8 cm, length 72.6 cm, 45 peopleProvalo tu
import numpy as np
# Non modificare le righe qui sotto
rng = np.random.default_rng(12)
chest = np.concatenate([rng.normal(88, 3, 30), rng.normal(98, 3.5, 35), rng.normal(110, 4, 25)])
length = np.concatenate([rng.normal(66, 1.8, 30), rng.normal(70, 2, 35), rng.normal(75, 2.2, 25)])
# 90 clienti, una riga ciascuno: circonferenza del torace e lunghezza in cm
people = np.round(np.column_stack([chest, length]), 1)
# La vecchia tabella delle taglie inizializza centers: S, M, L
sizes = ["S", "M", "L"]
centers = np.array([[85.0, 64.0], [90.0, 67.0], [96.0, 69.0]])
rounds = int(input())
# Tabella delle distanze: una riga per persona, una colonna per centro
def distances(X, centers):
table = np.zeros((len(X), len(centers)))
for c in range(len(centers)):
table[:, c] = np.sqrt(((X - centers[c]) ** 2).sum(axis=1))
return table
# 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