你有一堆點(可以是二維座標,也可以是圖片像素的顏色、一段文字的向量、一張臉的特徵),想把它們自動分成 幾群、每群用一個代表點(質心,centroid)概括——這就是 k-means 要做的事,也是最基礎的 非監督分群(unsupervised clustering,沒有正確答案標籤、只靠資料自己的分布)。做法叫 Lloyd's algorithm,簡單到只有兩步反覆做:①指派——每個點歸到離它最近的質心; ②更新——每個質心搬到自己那群所有點的平均位置。指派會讓質心該負責的點變了、更新又讓質心 位置變了,於是再指派、再更新……直到指派不再變動(收斂)。
這頁用一組固定的 12 個二維點示範一條決定性的收斂軌跡。初始 3 個質心刻意用固定亂數種子 (LCG)選在「兩顆擠在右邊那群、上方那群一開始沒有質心」的位置,所以你會清楚看到一顆質心慢慢遷移 到上方去,最後三顆質心各自落在三個天然群的中心。每一輪我們都算一個叫 inertia(群內平方和)的數字 ——它是 k-means 想要最小化的目標,Lloyd 保證它每一步都不會變大(單調不增),這就是本頁用來當 「真值檢查」的性質。
固定 12 個 2D 點分屬 3 個天然群(左下 / 左上 / 右,各 4 點)。以固定種子 LCG 從點集選出 3 個相異點當 初始質心。接著反覆做「更新質心 = 群內均值」與「重新指派每點到最近質心」,直到某一輪沒有任何點改變所屬 群(收斂)。畫面上每個資料點都有一條 spoke(連線)指向它目前所屬的質心——spoke 指向哪顆質心 就代表它屬於哪一群。抽選初始質心的隨機源與 Reservoir / Alias、LLM 取樣 為同一顆 LCG: next(x) = (1664525·x + 1013904223) mod 2^32、取值用高 16 位、先 burn-in 3 步。