La méthode du coude
Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 7 sur 51.
Tracez l’inertie en fonction de k. Tant que chaque nouveau centre divise un groupe réel, l’inertie chute fortement ; puis elle s’aplatit. Le coude, l’elbow, est une bonne valeur de k :
Une règle empirique : arrêtez-vous lorsqu’un centre supplémentaire réduit l’inertie de moins d’un quart. Les réductions obtenues avec les pommes : 56 %, puis 69 %, puis seulement 15 %. Donc k = 3 :
ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")Une courbe douce sans coude ne révèle pas de groupes distincts. La prochaine leçon introduit un deuxième juge.
Défi
FacileUne application pour plantes classe les plantes d’intérieur en plans d’entretien selon leurs besoins en lumière et en eau. Le code de départ contient des inerties pour k from 1 to 8, un graphique et cutoff.
- En partant de k = 1 et en augmentant, arrête-toi lorsque le k suivant réduit l’inertie de moins de
cutoff. Affiche ce k. - Trace l’inertie en fonction de k avec des points, une ligne verticale en tirets à ton k, puis affiche le graphique.
Pour une autre application, cutoff 0.25 :
Care plans: 3Coddy décrit ensuite 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(17)
# Quatre types de plantes : besoins habituels en lumière et en eau, et nombre de plantes
kinds = [(8.5, 2, 35), (2.5, 7.5, 30), (5, 5, 30), (8, 8, 25)]
parts = []
for l, w, n in kinds:
parts.append(np.column_stack([rng.normal(l, 0.8, n), rng.normal(w, 0.8, n)]))
# 120 plantes d’intérieur, une par ligne : besoins en lumière et en eau, notés de 1 à 10
plants = np.clip(np.round(np.concatenate(parts), 1), 1, 10)
# Inertie pour k = 1 à 8, à partir de Inertia
ks = list(range(1, 9))
inertias = []
for k in ks:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(plants)
inertias.append(km.inertia_)
cutoff = float(input())
fig, ax = plt.subplots()
ax.set_title("Elbow: Care Plans")
ax.set_xlabel("k")
ax.set_ylabel("Inertia")
# É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