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

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

码农世界 2024-06-14 后端 120 次浏览 0个评论

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=argCmin​i=1∑k​x∈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=argCmin​i=1∑k​x∈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Θmax​i=1∑n​log(j=1∑k​πj​N(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) 个高斯分布的概率密度函数。

        这些算法分别用于不同的数据特性和应用场景,可以根据数据的特征选择合适的聚类算法。

转载请注明来自码农世界,本文标题:《spark MLlib (DataFrame-based) 中的聚类算法Bisecting K-Means、K-Means、Gaussian Mixture》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,120人围观)参与讨论

还没有评论,来说两句吧...

Top