Menu
CoddyTech

Inerzia

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 6 di 51.

Questo capitolo parla di come scegliere k. Al termine, lo sceglierai per le consegne di una panetteria e mapperai le zone:

Una mappa delle fermate di consegna di una città's, con l’est verso destra in km e il nord verso l’alto in metri, suddivisa in tre zone di 45, 40 e 25 fermate, ciascuna con una stella nera al centro

Per prima cosa, un punteggio. L'inerzia somma le distanze al quadrato di ogni punto dal proprio centro: è piccola quando i punti sono vicini ai loro centri.

36 mele in tre gruppi, ciascuna collegata al centro a forma di stella nera del proprio gruppo da un sottile raggio grigio. L'inerzia eleva al quadrato la lunghezza di ogni raggio e le somma tutte

KMeans la conserva in inertia_. Per le 180 mele:

for k in [1, 2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, round(km.inertia_))

Questo stampa:

1 1718
2 752
3 230
4 196

Più centri, raggi più corti: l’inerzia diminuisce sempre all’aumentare di k. Con un centro per punto è 0, quindi il valore più piccolo non è il migliore.

challenge icon

Sfida

Facile

Una bottega di ceramiche impacchetta i vasi in scatole di poche dimensioni. A ogni vaso viene assegnata la dimensione più vicina; l’inerzia misura quanto male vi si adattano. Il programma legge budget, il massimo disadattamento che la bottega accetta.

  1. Prova k = 1, 2, 3 e così via: adatta KMeans a vases e stampa l’inerzia di ogni k, arrotondata.
  2. Fermati al primo k la cui inerzia rientra nel budget e stampalo.

Per un’altra bottega di ceramiche:

k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3

Provalo tu

import numpy as np
from sklearn.cluster import KMeans

# Non modificare le righe qui sotto
rng = np.random.default_rng(8)
# Quattro tipi di vaso: altezza e larghezza tipiche in cm e quantità di ciascun tipo
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
    parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 vasi, uno per riga: altezza e larghezza in cm
vases = np.round(np.concatenate(parts), 1)

# Il massimo scostamento, misurato come inerzia, accettato dal laboratorio di ceramica
budget = int(input())

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online