Atelier : deux centres à la main
Coder affectation et moyenne en numpy.
Énoncé
Sur X 1D = [0., 1., 9., 10.], k = 2, centres init [0., 10.] : faites 2 itérations à la main puis en numpy (affectation par distance, moyenne par groupe).
Contraintes
Détaillez affectations et moyennes. Code de vérification uniquement après le papier.
Indices
Tour 1 : {0,1} → 0,5 et {9,10} → 9,5. Tour 2 : stable.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
import numpy as np
X = np.array([0., 1., 9., 10.])
c = np.array([0., 10.])
for _ in range(2):
a = (np.abs(X[:, None] - c[None, :]).argmin(axis=1))
c = np.array([X[a == k].mean() for k in range(2)])
print(a, c) # [0 0 1 1] [0.5 9.5]
Si un cluster se vide, réinitialisez son centre sur un point lointain : c'est ce que fait k-means++ proprement dans sklearn.