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 :
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.
Défi
FacileUn 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.
- Ajuste KMeans sur
X: 3 clusters,n_init=10,random_state=0. - Représente chaque cluster comme un groupe distinct, étiqueté de
cluster 0àcluster 2. - Marque les centres avec des étoiles noires, étiquetées
centers. Ajoute une légende et affiche le graphique.
Comme ceci, pour une autre baleine :
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
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é
1Découvrir des groupes
Apprendre sans étiquettesMesurer la similaritéK-Means à la mainK-Means avec scikit-learnRécapitulatif : les membres de la salle de sport4Classification hiérarchique
Fusion étape par étapeModèles agglomératifsDendrogrammesRécapitulatif : races de chiens7L’ACP en pratique
Visualiser 64 dimensionsLes composantes comme motifsCompresser et reconstruireL’ACP avant un modèleRécapitulatif : scanner de visages10Projet : Explorateur de chiffres
Observer les chiffresRéduire avec la PCARegrouper les chiffresNommer les groupesRepérer les intrus2Choisir k
InertieLa méthode du coudeScores de silhouetteMettre à l’échelle avant le clusteringRécapitulatif : zones de livraisonEntraînez-vous par vous-même : Compilateur Python en ligne