Menu
CoddyTech

K-Means in scikit-learn

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

scikit-learn esegue l'intero ciclo k-means per te, qui su 180 mele valutate per dolcezza e croccantezza:

180 mele, dolcezza sull'asse orizzontale e croccantezza su quello verticale, in tre gruppi con una stella nera in corrispondenza di ciascun centro: dolci e croccanti in alto a destra, morbide in basso, aspre e croccanti in alto a sinistra. Una nuova mela in alto a destra si unisce al cluster 0

Adatta usando solo X, senza y:

from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
print(km.labels_[:8])
print(km.cluster_centers_.round(1))

Stampa i numeri dei cluster per 8 righe, poi una riga per centro:

[2 0 0 1 2 0 1 1]
[[7.  7.5]
 [6.  3. ]
 [2.9 8.1]]

n_init=10 prova 10 inizializzazioni e mantiene quella più compatta. km.predict([[8.6, 9.2]]) assegna alla nuova mela il centro più vicino, [0].

labels = km.fit_predict(X) fa entrambe le cose contemporaneamente: adatta il modello, poi restituisce labels_.

I numeri sono solo nomi: con altri dati, il cluster 0 può essere qualsiasi gruppo.

challenge icon

Sfida

Facile

Un biologo ha registrato 150 immersioni di una megattera: la durata dell’immersione e il riposo in superficie successivo. Esistono diversi tipi di immersione? Il codice iniziale prepara il grafico.

  1. Adatta KMeans a X: 3 cluster, n_init=10, random_state=0.
  2. Rappresenta ogni cluster come un gruppo a sé, con etichette da cluster 0 a cluster 2.
  3. Segna i centri con stelle nere, con l’etichetta centers. Aggiungi una legenda e mostra il grafico.

Come questo, ma di un’altra balena:

Un grafico a dispersione intitolato Whale Dives, con i minuti di immersione sull’asse orizzontale e il riposo in superficie su quello verticale: tre cluster, immersioni brevi con riposi lunghi in alto a sinistra, immersioni brevi con riposi brevi in basso, immersioni lunghe a destra, una stella nera in ciascuno e una legenda

Coddy descrive il tuo grafico.

Provalo tu

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Non modificare le righe seguenti
rng = np.random.default_rng(14)
dive = np.concatenate([rng.normal(4, 1.0, 60), rng.normal(12, 2.0, 50), rng.normal(2.5, 0.7, 40)])
rest = np.concatenate([rng.normal(1.5, 0.5, 60), rng.normal(4, 1.0, 50), rng.normal(8, 1.5, 40)])
# 150 immersioni di una megattera: durata dell'immersione e del successivo riposo in superficie, in minuti
X = np.round(np.clip(np.column_stack([dive, rest]), 0.5, None), 1)

fig, ax = plt.subplots()
ax.set_title("Whale Dives")
ax.set_xlabel("Dive (min)")
ax.set_ylabel("Surface rest (min)")

# 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