携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
k均值聚类算法,也叫 K Means,是机器学习中最简单常见的分类算法,属于无监督学习的算法。它可以将给定的数据点集合,分布在一个 N 维的坐标系中,按照彼此之间的相似度,分成 K 个群组,这里坐标系的维度 N,取决于数据点的变量数,而 K 需要人为指定。简而言之就是,将一堆数据,分成相似的几类。
K Means 的原理简述
为便于图形化呈现,下面以一个二维坐标中的点举例,描述 K Means 算法的原理,更高维度的情况,原理相同。
上图展示了 K Means 算法的运行步骤:
- 图 a 中,展示的是初始状态,一些数据点,根据自己的两个变量值在横纵坐标中对应的位置,分布在一个二维坐标系中,绿色代表所有的点还未被分类。
- 图 b 中,选取两个点(红色 x 和蓝色 x)作为两个群组的伪中心点。这里,选取两个点,代表我们指定让算法把这些数据点分成两类,第一次选取的两个中心点,因为 K Means 在分类的时候需要每个群组有一个中心点,而刚开始的时候,中心点是未知的,因此需要人为指定,这两个中心点由于不是计算得到的中心点,也叫做伪中心点。
- 图 c 中,将每一个数据点,根据到两个中心点的距离,分配给离自己相对较近的点,这样,所有的点就被分成了两个群组。
- 图 d 中,每个群组根据群组中所有点的分布,调整群组的中心点,得到两个新的中心点。
- 图 e 中,根据新的中心点,再将所有的数据点分配给距离较近的中心点,形成新的群组。
- 重复图 d 和 e 的步骤,直到群组中的成员不在发生变化。图 f 中展示的便是最终的状态。
数据点的维度
在 K Means 中,不管是数据点计算自己和中心点的距离,还是在群组中找到新的中心点,都涉及到大量的距离计算,这里的计算量跟数据点的维度(变量的个数)有很大的关系。因此,在数据预处理的阶段,要尽可能对变量数进行精简,也就是降维。
此外,如果数据集中存在异常点,比如,在坐标系中,与所有的点距离都较远的数据点,可能是异常数据点,要进行清除,否则会导致重心偏移。(这是由于 K Means 的一个缺陷导致的,下文会写)
K 值的选择
在 K Means 中,K 值是需要人为指定的,这不够「智能」。当 K 值越大的时候,群组中的数据点相似性越高,当 K 与数据点的数量相同时,每个数据点都是一个群组,但是此时就失去了「分类」的意义,只有当 K 足够小的时候,才能体现出群组之间更加明显的差异。因此 K 值的选择是一个权衡。
如上图中所示,随着 K 值的增加,群组中数据点的离散程度会下降,这个离散程度下降也可以理解为群组中数据点的相似性的增加,比较合适的 K 值是在折线图的观点处,当群组数量大于 3 的时候,离散程度下降便不那么明显了,因此,K 值选为 3 时比较好的。
K Means 的特点
K Means 的原理很简单朴素。在算法领域,「简单」在一定程度上以为这通用型和高效,也容易成为人们解决问题的首要选择,但是 K Means 也存在很多局限。
- 首先,每个数据点都必须属于一个群组,且只能属于一个群组,这会导致一些问题:
- 问题 a:一些异常的数据点,可能会导致中心点的偏移,这也是前面提到要对异常数据进行清除的原因。
- 问题 b:如果一个数据点恰好位于两个群组的正中间,或者离两个中心点都相对于其他数据点较近,那么它并不能被正确地分组。
- 其次,在 K Means 中,群组都被嘉定是离散的,他们之间不允许有重叠、嵌套等关系,这也是导致上述「问题 b」的原因之一。同时,它也成为了 K Means 算法的一个局限。
- 第三,群组都被假定是圆形的(二维情况下,更高维的情况类似),而在现实情况下,相似数据点在坐标系中的分布并非都是如此。
基于 K Means 存在的一些局限,实际应用中,通常会把 K Means 作为堆数据进行初步分析的算法,当通过 K Means 了解了大致的数据结构之后,在使用其他方法进行深入分析。