经典与统计学习

k均值聚类(k-means clustering)

/ kay-MEENZ KLUS-ter-ing /

k均值聚类是在没有人给数据贴标签时,找出其中天然分组的方法——纯粹的找规律,没有标准答案。假设你手里有成千上万名顾客,想把他们归成寥寥几类——精打细算型、大手大脚型、周末闲逛型——可没有人告诉过你谁属于哪一类。k均值靠反复回答两个问题,自己把这些组找出来:每个点离哪个组最近,以及每个组的中心该坐在哪里?

你先定下想要几个组——这就是k——再随机扔下k个中心点。然后两个步骤交替进行。分配:把每个数据点交给离它最近的那个中心。更新:把每个中心挪到刚分给它的所有点的平均位置上。再分配、再定心、再分配、再定心——中心们四处漂移,很快就稳定在天然成团的地方,像磁铁啪地吸进点云中最密的口袋里。当一切都不再移动,便大功告成。

它快、简单、能扩展到大数据,这使它成为分组任务里默认的第一选择。但它那些诚实的脚注很重要。你必须事先选定k,猜错了就得到一堆毫无意义的组。它假设各簇大致是圆的、大小相近,所以遇到细长、蜿蜒或大小悬殊的形状就会把它们揉烂。随机的起始位置意味着不同次运行可能落到不同答案,所以人们会跑好几遍、留下最好的那次。而且它没有「这些点不属于任何组」的概念——每个点都被硬塞进某个簇里,离群点也不例外。

把购物者按「每月到访次数」和「平均购物篮大小」画出来,要求分成k=3个组。算法把它们找了出来:一簇紧凑的「高频小篮」买家、一簇松散的「偶尔大手笔」者,以及夹在中间的一群。三个中心,无需任何标签便找了出来——一张直接从行为画出的顾客类型地图。

「先分配、再定心」,重复到中心不再移动为止。

k得你自己来选——算法不会告诉你「正确」的组数是多少,而选错的k会产出看着齐整、实则毫无意义的簇。它还假设各团是圆的、大小相近,所以遇到细长或满是噪声的数据,请改用DBSCAN或高斯混合模型。

又称
k-meansLloyd's algorithmk均值聚类k均值聚類k平均聚类