1. K-means算法的流程

K 均值聚类(K-Means Clustering)是一种常见的无监督学习算法,它会将数据集划分成 K K K 个簇(cluster),通过最小化簇内样本到簇中心的距离之和完成聚类。

(1) 确定 K K K

首先,用户需要预先指定划分簇的个数 K K K

(2) 初始化簇中心

随机选择 K K K 个数据点作为初始的簇中心(centroids)。这些簇中心是每个簇的代表点。

(3) 分配簇

对于数据集中每个样本,计算它与每个簇中心的距离(常用欧氏距离),并将其分配给距离最近的簇中心所对应的簇。

  • 欧氏距离计算公式:
    d ( x , c ) = ∑ i = 1 n ( x i − c i ) 2 d(x, c) = \sqrt{\sum_{i=1}^n (x_i - c_i)^2} d(x,c)=i=1n(xici)2
    其中 x x x 是数据点, c c c 是簇中心。
(4) 更新簇中心

对于1.3中划分好的每一个簇,计算该簇内所有数据点的平均值,并将这个平均值作为新的簇中心。

  • 公式:
    c j = 1 ∣ S j ∣ ∑ x i ∈ S j x i c_j = \frac{1}{|S_j|} \sum_{x_i \in S_j} x_i cj=Sj1xiSjxi
    其中 S j S_j Sj 是第 j j j 个簇中的所有样本, c j c_j cj 是新的簇中心。
(5) 重复步骤 3 和 4

不断迭代,重复执行 “分配簇”“更新簇中心” 两个步骤,直到簇中心不再发生显著变化或者达到了预设的最大迭代次数。通常情况下,算法在一定次数后会收敛,即簇中心的位置稳定。算法收敛后,每个数据点都会归属于一个簇,此时簇的划分就是最终结果。

2. K-means算法的目标函数

K 均值聚类的目标是最小化簇内的平方误差和(Within-cluster Sum of Squares,简称 WCSS):
J = ∑ j = 1 K ∑ x i ∈ S j ∥ x i − c j ∥ 2 J = \sum_{j=1}^K \sum_{x_i \in S_j} \left\| x_i - c_j \right\|^2 J=j=1KxiSjxicj2
其中 x i x_i xi 是数据点, c j c_j cj 是簇中心, S j S_j Sj 是簇 j j j 内的所有样本。

3. 算法优缺点

3.1 优点
  1. 简单高效,容易实现。
  2. 计算速度较快,适用于大数据集。
  3. 对球状簇效果较好。
3.2 缺点
  1. 需要预先指定簇的数量 K K K
  2. 对初始值敏感,初始簇中心的选择会影响结果。
  3. 适合于球状簇,对非球状或大小差异较大的簇效果不好。
  4. 容易受到离群点影响。

思考:为什么 K 均值聚类一定会收敛?

K 均值聚类一定会收敛,主要是基于以下两个原因:

(1) 目标函数每次迭代都在优化

K 均值聚类的目标是最小化簇内的平方误差和(WCSS)。目标函数为:
J = ∑ j = 1 K ∑ x i ∈ S j ∥ x i − c j ∥ 2 J = \sum_{j=1}^K \sum_{x_i \in S_j} \left\| x_i - c_j \right\|^2 J=j=1KxiSjxicj2
其中 S j S_j Sj 是第 j j j 个簇中的所有样本, c j c_j cj 是簇中心。

  • 在每次迭代中,K 均值会先将每个样本分配给距离最近的簇中心,然后重新计算每个簇的中心。这两个步骤每次都会使得目标函数 J J J 的值下降或保持不变,因为:
    • 当样本被重新分配到最近的簇时,总的簇内距离会减少或保持不变。
    • 更新簇中心时,新的簇中心是所有点的平均值,这会最小化簇内所有点到簇中心的距离。

由于目标函数 J J J 是非负的,并且每次迭代都会降低或保持不变,因此算法最终会收敛到一个局部最优的结果。

(2) 状态空间是有限的

K 均值聚类的分配步骤和簇中心的更新步骤都会导致数据点的分配发生变化。然而,簇的分配方式只有有限种组合:

  • 假设数据集有 n n n 个样本,簇的数量为 K K K,那么最多有 K n K^n Kn 种可能的样本分配方式。尽管这个组合数非常大,但它是有限的。
总结

K 均值聚类的收敛性依赖于以下两个性质:

  • 目标函数值有下界(非负)且每次迭代都会降低或保持不变。
  • 分配状态的组合是有限的。

这两点保证了算法一定会在有限次迭代后收敛,即簇的分配和簇中心不会再发生变化。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐