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