K-means 聚类算法详解
K-means 是一种基于距离的迭代聚类算法,旨在将数据集划分为 $K$ 个簇。其核心目标是最小化簇内点到簇中心的距离总和。下面我们从底层原理、算法步骤、数学基础、参数选择到代码实现进行系统解析。
1. 核心思想
K-means 的目标是将数据集划分为 $K$ 个簇(Clusters),使得每个数据点属于距离最近的簇中心。通过反复调整簇中心的位置,算法不断优化簇内的紧密度,从而获得尽量紧凑、彼此分离的簇。
- 簇(Cluster):K-means 通过最小化簇内距离的平方和,使得数据点在簇内聚集。一个簇是数据点的集合,这些点在某种意义上'彼此相似'。
- 簇中心(Centroid):簇中心是簇中所有点的平均值,表示簇的中心位置。
- 迭代优化:K-means 通过反复迭代,调整簇的分配,使得簇内数据点与质心的距离尽可能小,逐步收敛。
2. 工作流程
K-means 使用'最近距离'来分组,流程分为两个主要步骤:分配(Assignment)和更新(Update)。
- 初始化:随机选择 $K$ 个数据点作为初始簇中心(Centroids)。
- 分配:对于数据集中的每个点,将它分配到最近的簇中心对应的簇。这里的'距离'通常使用欧氏距离。
- 更新:根据当前的簇分配,重新计算每个簇的中心,即计算簇内所有点的均值作为新的簇中心。
- 重复:不断重复分配和更新步骤,直到簇中心不再发生变化(收敛)或达到指定的最大迭代次数。
实例演示
假设我们有以下二维数据点,表示顾客的'消费金额'和'访问次数',目标是将这些点分为 $K=2$ 个簇。
| 数据点编号 | 消费金额(x) | 访问次数(y) |
|---|---|---|
| 点 1 | 1 | 2 |
| 点 2 | 2 | 1 |
| 点 3 | 4 | 5 |
| 点 4 | 5 | 6 |
| 点 5 | 8 | 8 |
第一步:初始化质心 随机选择两个点作为初始质心(假设选择点 1 和点 5)。
- C1 = (1, 2)
- C2 = (8, 8)
第二步:分配簇 计算每个点到两个质心的欧几里得距离:$d = \sqrt{(x_1-x_2)^2 + (y_1-y_2)^2}$。
| 数据点编号 | 到 C1 的距离 | 到 C2 的距离 | 最近质心 | 分配簇 |
|---|---|---|---|---|
| 点 1 | 0 | 8.49 | C1 | 簇 1 |
| 点 2 | 1.41 | 8.06 | C1 | 簇 1 |
| 点 3 | 4.24 | 5.0 | C1 | 簇 1 |
| 点 4 | 5.0 |


