Menu
CoddyTech

Inertie

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

Ce chapitre porte sur le choix de k. À la fin, vous le choisirez pour les livraisons d’une boulangerie et tracerez les zones :

Carte des points de livraison d’une ville, avec l’est en km sur l’axe horizontal et le nord en mètres sur l’axe vertical, répartis en trois zones de 45, 40 et 25 points, chacune avec une étoile noire en son centre

D’abord, un score. L’inertie additionne les distances au carré de chaque point à son propre centre : elle est faible lorsque les points sont proches de leur centre.

36 des pommes réparties en trois groupes, chacune reliée au centre étoilé noir de son groupe par un fin rayon gris. L’inertie élève au carré la longueur de chaque rayon et additionne le tout

KMeans la conserve dans inertia_. Pour les 180 pommes :

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_))

Cela affiche :

1 1718
2 752
3 230
4 196

Plus de centres, des rayons plus courts : l’inertie diminue toujours à mesure que k augmente. Avec un centre par point, elle est de 0 ; la plus petite valeur n’est donc pas la meilleure.

challenge icon

Défi

Facile

Une poterie emballe des vases dans des boîtes de quelques tailles. Chaque vase est placé dans la taille la plus proche ; l’inertie mesure à quel point ils s’ajustent mal. Le programme lit budget, le défaut d’ajustement maximal accepté par la poterie.

  1. Essayez k = 1, 2, 3 et ainsi de suite : ajustez KMeans sur vases et affichez l’inertie de chaque k, arrondie.
  2. Arrêtez-vous au premier k dont l’inertie respecte le budget, puis affichez-le.

Pour une autre poterie :

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

Essayez vous-même

import numpy as np
from sklearn.cluster import KMeans

# Ne modifiez pas les lignes ci-dessous
rng = np.random.default_rng(8)
# Quatre types de vases : hauteur et largeur typiques en cm, et nombre de vases de chaque type
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 vases, une ligne par vase : hauteur et largeur en cm
vases = np.round(np.concatenate(parts), 1)

# Le degré maximal d’inadéquation, mesuré par l’inertie, que la poterie accepte
budget = int(input())

# É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