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

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=1kxCixμi2
    其中:
  • ( 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=1kxCixμi2
      其中:
  • ( 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=1nlog(j=1kπ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) 个高斯分布的概率密度函数。
    这些算法分别用于不同的数据特性和应用场景,可以根据数据的特征选择合适的聚类算法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 美丽的拉萨,神奇的布达拉宫
  • 项目实战系列——WebSocket——websock简介
  • 微服务之远程调用
  • 安装好IDEA后,就能够直接开始跑代码了吗?
  • 助力高考,一组彩色的文字
  • 趣谈网络协议
  • 第七章 Three.js 动画与交互
  • 热门开源项目推荐:技术与地址概览
  • laravel8使用中间件实现xss处理
  • 简单说一下STL中的map容器的特点、底层实现和应用场景【面试】
  • 【云原生】Kubernetes----Rancher助力Kubernetes监控
  • 开发uniapp 小程序时遇到的问题
  • DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式
  • MySQL怎么为表添加描述
  • PR插件-图层抖动弹跳缩放旋转模糊闪烁缩放抖动动作效果预设
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Akka系列(七):Actor持久化之Akka persistence
  • C# 免费离线人脸识别 2.0 Demo
  • Python中eval与exec的使用及区别
  • React Native移动开发实战-3-实现页面间的数据传递
  • windows下mongoDB的环境配置
  • 编写高质量JavaScript代码之并发
  • 从零开始的无人驾驶 1
  • 反思总结然后整装待发
  • 高程读书笔记 第六章 面向对象程序设计
  • 微信支付JSAPI,实测!终极方案
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 一起参Ember.js讨论、问答社区。
  • 再次简单明了总结flex布局,一看就懂...
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 回归生活:清理微信公众号
  • 数据可视化之下发图实践
  • 我们雇佣了一只大猴子...
  • ​低代码平台的核心价值与优势
  • #100天计划# 2013年9月29日
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (区间dp) (经典例题) 石子合并
  • (十七)Flink 容错机制
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)事件系统
  • (算法设计与分析)第一章算法概述-习题
  • (原)本想说脏话,奈何已放下
  • (转)平衡树
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .net core 依赖注入的基本用发
  • .Net Core中Quartz的使用方法
  • .NET 依赖注入和配置系统
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .net经典笔试题