K-means 聚类是一种常用的基于距离的聚类算法,旨在将数据集划分为 K 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面,我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点和源代码实现等角度进行详细解析。
1. K-means 的核心思想
K-means 的目标是将数据集划分为 K 个簇(clusters),使得每个数据点属于距离最近的簇中心。通过反复调整簇中心的位置,K-means 不断优化簇内的紧密度,从而获得尽量紧凑、彼此分离的簇。
核心思想
- 簇(Cluster):K-means 通过最小化簇内距离的平方和,使得数据点在簇内聚集。一个簇是数据点的集合,这些点在某种意义上'彼此相似'。比如,可以将商场顾客分为'学生群体''上班族''退休老人'这三个簇。
- 簇中心(Centroid):簇中心是簇中所有点的平均值,表示簇的中心位置。
- 簇分配和更新:K-means 通过反复迭代,调整簇的分配,使得簇内数据点与质心的距离尽可能小,逐步收敛。
如下图:
以簇中心为中心,划分范围


2. K-means 聚类的工作流程
2.1 核心思想
K-means 使用'最近距离'来分组:
- 随机选择 K 个质心(初始中心点)。
- 每个数据点分配到距离最近的质心所属的簇。
- 重新计算每个簇的质心。
- 重复步骤 2 和 3,直到质心不再变化(或达到指定的迭代次数)。
2.2 算法步骤(结合例子)
K-means 聚类的流程分为两个主要步骤:分配(Assignment)和更新(Update)。以下是详细步骤:
- 分配步骤(Assignment Step): 对于数据集中的每个点,将它分配到最近的簇中心对应的簇。这里的'距离'通常使用欧氏距离(Euclidean distance)。
- 更新步骤(Update Step): 根据当前的簇分配,重新计算每个簇的中心,即计算簇内所有点的均值作为新的簇中心。
- 重复 3 和 4 步: 不断重复分配和更新步骤,直到簇中心不再发生变化(收敛)或达到指定的最大迭代次数。
初始化簇中心: 随机选择 K 个数据点作为初始簇中心(centroids)。
选择 K 值: 设定簇的数量 K。
例子:
假设我们有以下二维数据点,表示顾客的'消费金额'和'访问次数':
| 数据点编号 | 消费金额(x) | 访问次数(y) |
|---|






