K 值聚类
理解 K 值聚类
目标
• 本节我们要学习 K 值聚类的概念以及它是如何工作的。
原理
我将用一个最常用的例子来给大家介绍 K 值聚类。
T 恤大小问题
话说有一个公司要生产一批新的 T 恤。很明显他们要生产不同大小的 T 恤来满足不同顾客的需求。所以这个公司收集了很多人的身高和体重信息,并把这些数据绘制在图上,如下所示:
肯定不能把每个大小的 T 恤都生产出来,所以他们把所有的人分为三组:小,中,大,这三组要覆盖所有的人。我们可以使用 K 值聚类的方法将所有人分为 3 组,这个算法可以找到一个最好的分法,并能覆盖所有人。如果不能覆盖全部人的话,公司就只能把这些人分为更多的组,可能是 4 个或 5 个甚至更多。如下图:
它是如何工作的?
这个算法是一个迭代过程,我们会借助图片逐步介绍它。
考虑下面这组数据(你也可以把它当成 T 恤问题),我们需要把他们分成两组。
第一步:随机选取两个重心点,C1 和 C2(有时可以选取数据中的两个点作为起始重心)。
第二步:计算每个点到这两个重心点的距离,如果距离 C1 比较近就标记为 0,如果距离 C2 比较近就标记为 1。(如果有更多的重心点,可以标记为“2”,“3”等)
在我们的例子中我们把属于 0 的标记为红色,属于 1 的标记为蓝色。我们就会得到下面这幅图。
第三步:重新计算所有蓝色点的重心,和所有红色点的重心,并以这两个点更新重心点的位置。(图片只是为了演示说明而已,并不代表实际数据)
重复步骤 2,更新所有的点标记。
我们就会得到下面的图
继续迭代步骤 2 和 3,直到两个重心点的位置稳定下来。(当然也可以通过设置迭代次数,或者设置重心移动距离的阈值来终止迭代。)。此时这些点到它们相应重心的距离之和最小。简单来说,C1 到红色点的距离与 C2 到蓝色点的距离之和最小。
最终结果如下图所示:
这就是对 K 值聚类的一个直观解释。要想知道更多细节和数据解释,你应该读一本关于机器学习的教科书或者参考更多资源中的链接。这只是 K 值聚类的基础。现在对这个算法有很多改进,比如:如何选取好的起始重心点,怎样加速迭代过程等。