generate k means, m1, ..., mk, using a random number generator; while the change is not insignificant Assignment step: for each cluster i, Si = {xp | ∥xp - mi∥2 < ∥xp - mj∥2 ∀j, j ≠ i and 1 ≤ j ≤ k}; Update step: for each cluster i, mi = (1 / |Si|) Σj(xj ∈ Si); // Note xj is a vector.
draw()
.