当前位置: 首页 > news >正文

SIAM-2007《k-means++: The Advantages of Careful Seeding》

推荐深蓝学院的《深度神经网络加速:cuDNN 与 TensorRT》,课程面向就业,细致讲解CUDA运算的理论支撑与实践,学完可以系统化掌握CUDA基础编程知识以及TensorRT实战,并且能够利用GPU开发高性能、高并发的软件系统,感兴趣可以直接看看链接:深蓝学院《深度神经网络加速:cuDNN 与 TensorRT》
在这里插入图片描述

论文核心思想

论文的核心思想是改进传统 k-means 聚类算法 的初始中心选择方法,通过引入一种随机化的 D 2 D^2 D2 加权种子选择技术(即 k-means++ 算法),显著提高聚类的准确性和收敛速度。传统 k-means 算法随机选择初始中心可能导致次优解,而 k-means++ 通过基于数据点到已选中心距离的概率分布选择初始中心,从而在理论上和实践中都获得更好的聚类效果。

具体而言,k-means++ 的核心创新在于:

  1. 初始中心选择优化:通过 D 2 D^2 D2 加权概率选择初始中心,使得新选择的中心更可能位于远离已有中心的区域,从而更好地覆盖数据空间。
  2. 理论保证:证明了 k-means++ 的期望潜在函数值 E [ ϕ ] E[\phi] E[ϕ] 与最优聚类潜在函数值 ϕ OPT \phi_{\text{OPT}} ϕOPT 的比值在 O ( log ⁡ k ) O(\log k) O(logk) 范围内,具有竞争性保证。
  3. 实践性能提升:实验表明,k-means++ 在多种数据集上比传统 k-means 更快收敛,且获得更低的潜在函数值(即更高质量的聚类)。

目标函数

k-means 聚类问题的目标函数是 最小化数据点到其最近中心的平方距离总和,定义为潜在函数 ϕ \phi ϕ

ϕ = ∑ x ∈ X min ⁡ c ∈ C ∥ x − c ∥ 2 \phi = \sum_{x \in \mathcal{X}} \min_{c \in \mathcal{C}} \|x - c\|^2 ϕ=xXcCminxc2

其中:

  • X ⊂ R d \mathcal{X} \subset \mathbb{R}^d XRd 是包含 n n n 个数据点的集合。
  • C = { c 1 , c 2 , … , c k } \mathcal{C} = \{c_1, c_2, \dots, c_k\} C={c1,c2,,ck} k k k 个聚类中心的集合。
  • ∥ x − c ∥ 2 \|x - c\|^2 xc2 表示数据点 x x x 到中心 c c c 的欧几里得距离的平方。

该目标函数衡量了聚类的紧致性,最优聚类 C OPT \mathcal{C}_{\text{OPT}} COPT 对应的潜在函数值为 ϕ OPT \phi_{\text{OPT}} ϕOPT。k-means 和 k-means++ 都旨在通过迭代优化来逼近 ϕ OPT \phi_{\text{OPT}} ϕOPT


目标函数的优化过程

k-means++ 的优化过程分为两个阶段:种子选择阶段标准 k-means 迭代阶段

1. 种子选择阶段( D 2 D^2 D2 加权选择)

k-means++ 通过以下步骤选择初始的 k k k 个中心:

  1. 初始中心:从数据点 X \mathcal{X} X 中均匀随机选择第一个中心 c 1 c_1 c1

  2. 后续中心选择:对于每个后续中心 c i c_i ci i = 2 , … , k i=2, \dots, k i=2,,k),定义 D ( x ) D(x) D(x) 为数据点 x x x 到已选最近中心的距离。选择新中心 x ∈ X x \in \mathcal{X} xX 的概率为:

    D ( x ) 2 ∑ x ∈ X D ( x ) 2 \frac{D(x)^2}{\sum_{x \in \mathcal{X}} D(x)^2} xXD(x)2D(x)2

    这种 D 2 D^2 D2 加权方法倾向于选择远离已有中心的点,从而避免初始中心过于集中。

  3. 重复步骤 2 直到选择 k k k 个中心。

2. 标准 k-means 迭代阶段

在选择初始中心后,k-means++ 执行标准 k-means 算法的迭代步骤:

  1. 分配阶段:对于每个数据点 x ∈ X x \in \mathcal{X} xX,将其分配到距离最近的中心 c i c_i ci,形成聚类 C i C_i Ci

    C i = { x ∈ X ∣ ∥ x − c i ∥ 2 ≤ ∥ x − c j ∥ 2 , ∀ j ≠ i } C_i = \{ x \in \mathcal{X} \mid \|x - c_i\|^2 \leq \|x - c_j\|^2, \forall j \neq i \} Ci={xXxci2xcj2,j=i}

  2. 更新阶段:对于每个聚类 C i C_i Ci,更新中心 c i c_i ci 为该聚类的质心:

    c i = 1 ∣ C i ∣ ∑ x ∈ C i x c_i = \frac{1}{|C_i|} \sum_{x \in C_i} x ci=Ci1xCix

  3. 迭代:重复分配和更新步骤,直到中心 C \mathcal{C} C 不再变化或满足终止条件。

优化原理:每次分配和更新都保证潜在函数 ϕ \phi ϕ 单调递减(由引理 2.1 保证,更新质心会减少平方距离和)。k-means++ 的关键改进在于初始中心的 D 2 D^2 D2 选择方法,它通过理论分析保证初始 ϕ \phi ϕ 的期望值接近最优解,从而为后续迭代提供更好的起点。


主要的贡献点

  1. 提出 k-means++ 算法

    • 通过 D 2 D^2 D2 加权种子选择方法改进 k-means 的初始中心选择,显著提高聚类质量和收敛速度。
    • 算法简单且易于实现,与标准 k-means 兼容。
  2. 理论保证

    • 证明了 k-means++ 的期望潜在函数满足:

      E [ ϕ ] ≤ 8 ( ln ⁡ k + 2 ) ϕ OPT E[\phi] \leq 8(\ln k + 2) \phi_{\text{OPT}} E[ϕ]8(lnk+2)ϕOPT

      这表明 k-means++ 是 O ( log ⁡ k ) O(\log k) O(logk) 竞争性的,优于传统 k-means 的无界误差。

    • 进一步证明 D 2 D^2 D2 种子选择的误差下界为 Ω ( log ⁡ k ) \Omega(\log k) Ω(logk),表明分析是紧致的。

  3. 扩展性

    • 提出 D 2 D^2 D2 种子选择可以推广到任意度量空间和更广义的潜在函数 ϕ [ ℓ ] = ∑ x ∈ X min ⁡ c ∈ C ∥ x − c ∥ ℓ \phi^{[\ell]} = \sum_{x \in \mathcal{X}} \min_{c \in \mathcal{C}} \|x - c\|^\ell ϕ[]=xXmincCxc,使用 D ℓ D^\ell D 加权选择,期望误差为:

      E [ ϕ [ ℓ ] ] ≤ 2 ℓ + 2 ( ln ⁡ k + 2 ) ϕ OPT E[\phi^{[\ell]}] \leq 2^{\ell+2}(\ln k + 2) \phi_{\text{OPT}} E[ϕ[]]2+2(lnk+2)ϕOPT

  4. 实证验证

    • 在合成数据集(NORM-10、NORM-25)和真实数据集(Cloud、Intrusion)上验证了 k-means++ 的优越性,显示其在潜在函数值和运行时间上均优于传统 k-means。

实验结果

实验在四个数据集上进行比较,分别为:

  • NORM-10 和 NORM-25:合成数据集,包含 10,000 个点,分别有 10 和 25 个高斯分布生成的簇。
  • Cloud:包含 1,024 个点,10 维,来自 UCI 机器学习库的云覆盖数据集。
  • Intrusion:包含 494,019 个点,35 维,表示入侵检测系统的特征数据集。

实验设置

  • 每个数据集运行 20 次试验,记录平均潜在函数值 ϕ \phi ϕ、最小 ϕ \phi ϕ 和平均运行时间 T T T
  • 比较 k-means 和 k-means++ 在不同 k k k 值(10、25、50)下的表现。

结果分析

  1. NORM-10 数据集(表 1):

    • k = 10 k=10 k=10 时,k-means++ 的平均 ϕ \phi ϕ 为 5.122,远低于 k-means 的 10,898;运行时间为 0.05 秒,优于 k-means 的 0.48 秒。
    • k = 25 k=25 k=25 k = 50 k=50 k=50 时,k-means++ 的 ϕ \phi ϕ 接近最优,且运行时间略高于 k-means,但整体性能更优。
  2. NORM-25 数据集(表 2):

    • k = 25 k=25 k=25 时,k-means++ 的平均 ϕ \phi ϕ 为 15.8313,显著优于 k-means 的 48,050.5;运行时间为 0.26 秒,快于 k-means 的 1.69 秒。
    • 对于 k = 50 k=50 k=50,k-means++ 的 ϕ \phi ϕ 接近最优,运行时间略高。
  3. Cloud 数据集(表 3):

    • k-means++ 在所有 k k k 值下均获得更低的 ϕ \phi ϕ(例如, k = 10 k=10 k=10 时,平均 ϕ \phi ϕ 为 6,151.2 vs. 7,553.5),且运行时间几乎减半( k = 10 k=10 k=10 时,0.05 秒 vs. 0.12 秒)。
  4. Intrusion 数据集(表 4):

    • k-means++ 的性能提升尤为显著。例如, k = 25 k=25 k=25 时,平均 ϕ \phi ϕ 2.53 ⋅ 10 6 2.53 \cdot 10^6 2.53106,比 k-means 的 3.15 ⋅ 10 8 3.15 \cdot 10^8 3.15108 低 2-3 个数量级;运行时间减少约 25%(313.65 秒 vs. 421.5 秒)。

结论

  • k-means++ 在所有数据集上都显著优于 k-means,尤其在潜在函数值上,差距可达数个数量级。
  • 在运行时间上,k-means++ 通常更快,尤其在真实数据集上,归因于更好的初始中心选择减少了迭代次数。
  • 在合成数据集上,k-means++ 几乎总是达到最优聚类,而 k-means 因随机种子选择可能合并簇,导致性能不佳。

算法实现过程

以下是 k-means++ 算法的详细实现过程(以伪代码形式描述),结合理论分析和实践考虑:

def kmeans_plus_plus(X, k):# 输入:数据集 X(n 个点,d 维),聚类数 k# 输出:k 个聚类中心 C,聚类分配n, d = X.shapeC = []  # 初始化中心列表# 步骤 1a:随机选择第一个中心c1_idx = random.randint(0, n-1)C.append(X[c1_idx])# 步骤 1b & 1c:选择剩余 k-1 个中心for _ in range(k-1):# 计算每个点到最近中心的距离 D(x)D = np.zeros(n)for i, x in enumerate(X):D[i] = min(np.sum((x - c) ** 2) for c in C)# 计算 D^2 加权概率probs = D ** 2 / np.sum(D ** 2)# 根据概率选择新中心new_center_idx = np.random.choice(n, p=probs)C.append(X[new_center_idx])# 步骤 2-4:执行标准 k-means 算法while True:# 分配阶段:将每个点分配到最近中心clusters = [[] for _ in range(k)]for x in X:distances = [np.sum((x - c) ** 2) for c in C]cluster_idx = np.argmin(distances)clusters[cluster_idx].append(x)# 更新阶段:重新计算每个聚类的质心new_C = []for cluster in clusters:if len(cluster) == 0:  # 处理空簇情况new_C.append(C[len(new_C)])  # 保留原中心else:new_C.append(np.mean(cluster, axis=0))# 检查收敛if np.allclose(C, new_C):breakC = new_Creturn C, clusters

实现要点

  1. 初始化

    • 第一个中心均匀随机选择,确保算法的随机性。
    • 后续中心使用 D 2 D^2 D2 加权概率选择,计算 D ( x ) D(x) D(x) 时需要遍历所有点到已有中心的距离,复杂度为 O ( n k ) O(nk) O(nk)
  2. 概率计算

    • D ( x ) 2 D(x)^2 D(x)2 的归一化概率需要高效计算,实践中可使用向量化操作(如 NumPy)加速。
  3. 标准 k-means 迭代

    • 分配阶段复杂度为 O ( n k ) O(nk) O(nk),更新阶段复杂度为 O ( n ) O(n) O(n)
    • 为避免空簇,需检查每个聚类的点数,若为空则保留原中心或随机选择新点。
  4. 优化考虑

    • 使用 kd-tree 或其他近似最近邻搜索可以降低 D ( x ) D(x) D(x) 计算的复杂度。
    • 提前终止条件(如最大迭代次数或 ϕ \phi ϕ 变化小于阈值)可进一步提高效率。
  5. 数值稳定性

    • D ( x ) 2 D(x)^2 D(x)2 的和可能很大,需注意归一化时的数值溢出问题。
    • 在高维数据上,欧几里得距离计算需优化以避免性能瓶颈。

理论支持

  • 引理 3.2 保证第一个随机中心的期望误差为 2 ϕ OPT ( A ) 2 \phi_{\text{OPT}}(A) 2ϕOPT(A)
  • 引理 3.3 证明 D 2 D^2 D2 加权选择的后续中心期望误差为 8 ϕ OPT ( A ) 8 \phi_{\text{OPT}}(A) 8ϕOPT(A)
  • 引理 3.4 通过归纳法推导总体期望误差 E [ ϕ ] ≤ 8 ( ln ⁡ k + 2 ) ϕ OPT E[\phi] \leq 8(\ln k + 2) \phi_{\text{OPT}} E[ϕ]8(lnk+2)ϕOPT
  • 引理 4.1 和定理 4.3 表明 D 2 D^2 D2 种子选择的误差下界为 Ω ( log ⁡ k ) \Omega(\log k) Ω(logk),验证了分析的紧致性。

总结

k-means++ 通过 D 2 D^2 D2 加权种子选择方法显著改进了 k-means 算法,提供理论上的 O ( log ⁡ k ) O(\log k) O(logk) 竞争性保证和实践中的优越性能。其目标函数是最小化平方距离和,优化过程结合了随机化的种子选择和标准的 k-means 迭代。实验结果验证了其在多种数据集上的高效性和高质量聚类能力。算法实现简单,易于扩展到更广义的度量空间和潜在函数,为聚类问题提供了一个兼具理论和实践优势的解决方案。

相关文章:

  • 【漫话机器学习系列】275.GrabCut 算法——用于去除图片背景(Grabcut For Removing Image Backgrounds)
  • Oracle 19c DG备库报错ORA-00313、ORA-00312、ORA-27037
  • Kafka + Flink + Spark 构建实时数仓全链路实战
  • Linux系统管理与编程23:巧用git资源一键部署LAMP
  • wordpress主题开发中常用的12个模板文件
  • 算法中的数学:费马小定理
  • python下通过wmic设置程序的优先级~~~
  • 如何理解线性判别分析(LDA)算法?
  • Java语言快速排序和堆排序(优先队列)介绍,附demo代码
  • 安卓11 多任务视图270 度的情况报错
  • 12软件测试需求分析案例-删除学生信息
  • 免费PDF工具-PDF24V9.16.0【win7专用版】
  • 2025年八大员【标准员】考试题库及答案
  • 基于netty实现视频流式传输和多线程传输
  • 25年软考架构师真题(回忆更新中)
  • 【检索增强生成(RAG)全解析】从理论到工业级实践
  • 动静态库--
  • 嵌入式<style>设计模式
  • 设计模式 - 模板方法模式
  • 前端项目部署 打包上线
  • 潍坊市做网站/seo工作职责
  • 如何在360网站网页上做笔记/私域运营软件
  • 电子政务门户网站建设的教训/找个免费网站这么难吗
  • 郑州市人民政府网站建设现状/软文发布推广平台
  • 襄阳做网站 优帮云/沈阳seo搜索引擎
  • 做外文翻译的网站/百度推广可以自己开户吗