Menu
CoddyTech

K-Means avec scikit-learn

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 4 sur 51.

scikit-learn exécute toute la boucle k-means pour toi, ici sur 180 pommes évaluées selon leur douceur et leur croquant :

180 pommes, la douceur sur l’axe horizontal et le croquant sur l’axe vertical, réparties en trois groupes avec une étoile noire au centre de chacun : douces et croquantes en haut à droite, molles en bas, acidulées et croquantes en haut à gauche. Une nouvelle pomme en haut à droite rejoint le cluster 0

Ajustez le modèle avec X seul, sans 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))

Cela affiche les numéros de cluster des 8 lignes, puis une ligne par centre :

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

n_init=10 essaie 10 initialisations et conserve la plus compacte. km.predict([[8.6, 9.2]]) attribue à la nouvelle pomme son centre le plus proche, [0].

labels = km.fit_predict(X) fait les deux à la fois : il ajuste le modèle, puis renvoie labels_.

Les nombres ne sont que des noms : sur d’autres données, le cluster 0 peut correspondre à n’importe quel groupe.

challenge icon

Défi

Facile

Un biologiste a consigné 150 plongées d’une baleine à bosse : la durée de chaque plongée et le repos en surface qui la suit. Existe-t-il différents types de plongée ? Le code de départ prépare le graphique.

  1. Ajuste KMeans sur X : 3 clusters, n_init=10, random_state=0.
  2. Représente chaque cluster comme un groupe distinct, étiqueté de cluster 0 à cluster 2.
  3. Marque les centres avec des étoiles noires, étiquetées centers. Ajoute une légende et affiche le graphique.

Comme ceci, pour une autre baleine :

Un nuage de points intitulé Whale Dives, avec les minutes de plongée en abscisse et le repos en surface en ordonnée : trois clusters, les plongées courtes avec de longs repos en haut à gauche, les plongées courtes avec de courts repos en bas, les plongées longues à droite, une étoile noire dans chacun et une légende

Coddy décrit ton graphique.

Essayez vous-même

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

# Ne modifiez pas les lignes ci-dessous
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 plongées d’une même baleine à bosse : durée de chaque plongée et du repos à la surface qui suit, en minutes
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)")

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne