spark MLlib (DataFrame-based) 中的聚类算法Bisecting K-Means、K-Means、Gaussian Mixture

Bisecting K-Means

核心原理:

Bisecting K-Means 是一种层次 K-Means 聚类算法,基于 Steinbach、Karypis 和 Kumar 的论文《A comparison of document clustering techniques》,并对 Spark 环境进行了修改和适应。

该算法通过递归地将数据集分割为二叉树结构的子集群来执行聚类。开始时,整个数据集视为单个聚类,然后通过以下步骤逐步分割:

  1. 选择当前具有最大 SSE(Sum of Squared Errors)的聚类进行分割。
  2. 在选定的聚类中执行 K-Means 聚类,根据距离选择最佳的分割点。
    这种分割方法不断重复,直到达到预定的聚类数量或无法进一步分割。
    数学表达式:
    对于 Bisecting K-Means,其核心是基于 K-Means 的分割操作,数学表达式如下所示:
    C = arg ⁡ min ⁡ C ∑ i = 1 k ∑ x ∈ C i ∥ x − μ i ∥ 2 \mathbf{C} = \arg \min_{C} \sum_{i=1}^{k} \sum_{\mathbf{x} \in C_i} \|\mathbf{x} - \mathbf{\mu}_i\|^2 C=argCmini=1∑kx∈Ci∑∥x−μi∥2
    其中:
  • ( C ) ( \mathbf{C} ) (C) 表示聚类结果,包含 ( k ) ( k ) (k) 个聚类 ( C i ) ( C_i ) (Ci)。
  • ( x ) ( \mathbf{x} ) (x) 是数据点。
  • ( μ i ) ( \mathbf{\mu}_i ) (μi) 是第 ( i ) ( i ) (i) 个聚类 ( C i ) ( C_i ) (Ci) 的中心点。

K-Means

核心原理:

K-Means 是一种经典的聚类算法,通过最小化每个聚类中所有数据点与其所属聚类中心点之间的平方距离的总和来进行聚类。

该算法的步骤如下:

  1. 初始化 :随机初始化 ( k ) ( k ) (k) 个聚类中心点。
  2. 迭代优化
    • 将每个数据点分配到最近的聚类中心。
    • 更新每个聚类中心为其分配的所有数据点的平均值。
    • 重复以上两步,直到收敛(即聚类中心不再变化或变化很小)。
      数学表达式:
      K-Means 的优化目标是最小化以下损失函数:
      C = arg ⁡ min ⁡ C ∑ i = 1 k ∑ x ∈ C i ∥ x − μ i ∥ 2 \mathbf{C} = \arg \min_{C} \sum_{i=1}^{k} \sum_{\mathbf{x} \in C_i} \|\mathbf{x} - \mathbf{\mu}_i\|^2 C=argCmini=1∑kx∈Ci∑∥x−μi∥2
      其中:
  • ( C ) ( \mathbf{C} ) (C) 表示聚类结果,包含 ( k ) ( k ) (k) 个聚类 ( C i ) ( C_i ) (Ci)。
  • ( x ) ( \mathbf{x} ) (x) 是数据点。
  • ( μ i ) ( \mathbf{\mu}_i ) (μi) 是第 ( i ) ( i ) (i) 个聚类 ( C i ) ( C_i ) (Ci) 的中心点。

Gaussian Mixture

核心原理:

高斯混合模型(Gaussian Mixture Model,GMM)是一种概率模型,假设数据是由多个高斯分布组成的混合体。每个高斯分布代表一个聚类,数据点是从这些高斯分布中生成的。

GMM 通过最大化似然函数来估计模型参数,即数据点出现的概率:
Θ = arg ⁡ max ⁡ Θ ∑ i = 1 n log ⁡ ( ∑ j = 1 k π j N ( x i ∣ μ j , Σ j ) ) \mathbf{\Theta} = \arg \max_{\Theta} \sum_{i=1}^{n} \log \left( \sum_{j=1}^{k} \pi_j \mathcal{N}(\mathbf{x}_i | \mathbf{\mu}_j, \mathbf{\Sigma}_j) \right) Θ=argΘmaxi=1∑nlog(j=1∑kπjN(xi∣μj,Σj))

其中:

  • ( Θ ) ( \mathbf{\Theta} ) (Θ) 是 GMM 的参数集合,包括每个高斯分布的均值 ( μ j ) ( \mathbf{\mu}_j ) (μj)、协方差矩阵 ( Σ j ) ( \mathbf{\Sigma}_j ) (Σj) 和混合系数 ( π j ) ( \pi_j ) (πj)。
  • ( x i ) ( \mathbf{x}_i ) (xi) 是数据点。
  • ( N ( x ∣ μ j , Σ j ) ) ( \mathcal{N}(\mathbf{x} | \mathbf{\mu}_j, \mathbf{\Sigma}_j) ) (N(x∣μj,Σj)) 是第 ( j ) ( j ) (j) 个高斯分布的概率密度函数。
    这些算法分别用于不同的数据特性和应用场景,可以根据数据的特征选择合适的聚类算法。
相关推荐
↣life♚18 分钟前
SAM2论文解读-既实现了视频的分割一切,又比图像的分割一切SAM更快更好
人工智能·深度学习·算法·计算机视觉·视频分割·通用分割
鼓掌MVP21 分钟前
“荔枝使”的难题怎么破:A*运输路径算法编程实践
算法
GIS小天26 分钟前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月21日第115弹
人工智能·算法·机器学习·彩票
多吃蔬菜!!!1 小时前
C++模板基础
java·c++·算法
凌肖战1 小时前
力扣网C语言编程题:多数元素
c语言·算法·leetcode
周末程序猿1 小时前
Linux高性能网络编程十谈|9个C++的开源的网络框架
后端·算法
jz_ddk2 小时前
[学习] 哈希码:原理、用途与实现详解(C代码示例)
c语言·学习·算法·哈希算法
AndrewHZ2 小时前
【Python与生活】如何实现一个条形码检测算法?
人工智能·pytorch·python·深度学习·算法·生活
GG不是gg3 小时前
一文详解归并分治算法
算法
陈壮实的搬砖日记4 小时前
激活函数为何能增强神经网络的非线性表达能力?
深度学习·算法·机器学习