k均值聚類(k-means clustering)
/ kay-MEENZ KLUS-ter-ing /
k均值聚類是在沒有人給資料貼標籤時,找出其中天然分組的方法——純粹的找規律,沒有標準答案。假設你手裡有成千上萬名顧客,想把他們歸成寥寥幾類——精打細算型、大手大腳型、週末閒逛型——可沒有人告訴過你誰屬於哪一類。k均值靠反覆回答兩個問題,自己把這些組找出來:每個點離哪個組最近,以及每個組的中心該坐在哪裡?
你先定下想要幾個組——這就是k——再隨機扔下k個中心點。然後兩個步驟交替進行。分配:把每個資料點交給離它最近的那個中心。更新:把每個中心挪到剛分給它的所有點的平均位置上。再分配、再定心、再分配、再定心——中心們四處漂移,很快就穩定在天然成團的地方,像磁鐵啪地吸進點雲中最密的口袋裡。當一切都不再移動,便大功告成。
它快、簡單、能擴展到大資料,這使它成為分組任務裡預設的第一選擇。但它那些誠實的腳註很重要。你必須事先選定k,猜錯了就得到一堆毫無意義的組。它假設各簇大致是圓的、大小相近,所以遇到細長、蜿蜒或大小懸殊的形狀就會把它們揉爛。隨機的起始位置意味著不同次執行可能落到不同答案,所以人們會跑好幾遍、留下最好的那次。而且它沒有「這些點不屬於任何組」的概念——每個點都被硬塞進某個簇裡,離群點也不例外。
把購物者按「每月到訪次數」和「平均購物籃大小」畫出來,要求分成k=3個組。演算法把它們找了出來:一簇緊湊的「高頻小籃」買家、一簇鬆散的「偶爾大手筆」者,以及夾在中間的一群。三個中心,無需任何標籤便找了出來——一張直接從行為畫出的顧客類型地圖。
「先分配、再定心」,重複到中心不再移動為止。
k得你自己來選——演算法不會告訴你「正確」的組數是多少,而選錯的k會產出看著齊整、實則毫無意義的簇。它還假設各團是圓的、大小相近,所以遇到細長或滿是雜訊的資料,請改用DBSCAN或高斯混合模型。