Spark 3.0 - 14.ML 高斯混合聚类理论与实战

news2024/11/18 8:48:05

目录

一.引言

二.高斯混合模型理论

1.高斯模型 GM

2.高斯混合模型 GMM

三.高斯混合模型实践

1.数据准备

2.模型训练

3.获取多个 GM

四.总结


一.引言

前面提到的 K-means 是发现数据对应簇的硬聚类方法,即分配一个点其固定分配到某个簇,而高斯混合模型聚合提供了软聚类的方法,它给定数据属于 K 个簇中心的概率或可能性度量,下面介绍下高斯混合模型 Guassion Mixture Modeling 即 GMM。

二.高斯混合模型理论

1.高斯模型 GM

在介绍高斯混合模型之前,有必要先介绍下高斯模型。高斯分布是一个在数学、物理以及工程领域非常重要的概率分布,在统计学方面有很大的影响力。它指的是若随机变量 X 服从一个数学期望为 μ,方差为 σ^2 的高斯分布则记为 N(μ, σ^2)。概率密度函数为高斯分布的期望值 μ 决定了分布的位置,标准差 σ 定义了分布的幅度。最常见的分布为 N(0,1) 的正态分布:

 高斯分布的数学表达公式如下:

f(x)=\frac{1}{\sqrt{2\pi }\sigma}exp(-\frac{(x-\mu)^2}{2\sigma ^2})

这里 μ 和 σ 都是用以表示分布的位置。高斯分布在应用上常用于图像处理、数据归纳和模式识别等方面,在对图像噪声的提取、特征分布的鉴定等方面有重要的功能。以高斯分布为基础的单高斯分布聚类模型的原理就是考察已有数据建立一个分布模型,之后通过代入样本数据计算其值是否在一个阈值范围之内。

换句话说,对于每个样本数据考察其与先构建的高斯分布模型的匹配程度,若一个数据向量在一个高斯分布模型计算的阈值之内,则认为它与高斯分布相匹配,如果不符合阈值则认为不属于该模型的聚类。

2.高斯混合模型 GMM

下面介绍多维高斯分布模型,其公式如下:

G(x,\mu ,\sigma )=\frac{1}{\sqrt{2\pi}}exp(-\frac{(x-\mu)^{n-1})}{2\sigma})

其中 x 是一条样本数据,μ 和 σ 分别为样本的期望和方差。通过代入计算很容易判断样本是否属于整体模型。高斯分布模型通过训练已有的数据得到,并通过更新减少认为干扰,从而实现自动对数据进行聚类计算。

为什么要提出高斯混合模型,以为内单一模型与实际数据的分布严重不符,但是几个模型混合后却能很好的描述和预测数据。就像复杂的曲线用一阶模型很难预测,但是使用多项式就能很好地拟合曲线。混合高斯模型就是在单一高斯模型的基础上发展起来的,其中每个高斯模型都代表一个类,即一个簇中心 cluster。用样本中的数据在几个高斯模型上投影,就会分别得到样本在各个类即高斯模型上的概率,然后就可以选取概率最大的类作为聚类的判定结果。

可以看到如果使用单一高斯模型,对于过度重叠的数据无法严谨区分,这时候如果有混合高斯模型,就能解决问题。高斯混合模型的原理可以用简单的一句话表述,任何样本的聚类都可以使用多个高斯模型来表示。

Pr(x) = \sum \pi G(x,\mu ,\sigma )

公式中 G(x,μ,σ) 是混合高斯模型的聚类中心,我们需要做的就是在样本数据已知的情况下训练获得模型参数。这里使用的是极大似然估计,用到了 EM 算法,有很多大佬都做了推导验证,这里不就做多介绍了。

三.高斯混合模型实践

1.数据准备

    val spark = SparkSession
      .builder      //创建spark会话
      .master("local")  //设置本地模式
      .appName("GaussianMixtureExample")  //设置名称
      .getOrCreate()   //创建会话变量

    // 读取数据
    val dataset = spark.read.format("libsvm").load("/Users/xudong11/sparkV3/src/main/scala/org/example/Cluster/sample_kmeans_data.txt")

数据以 libsvm 格式给出,三维数据 (x,y,z),由于数据简单,这里肉眼可见 (1,1,1) 附近属于距离点 0,1,2 较近,而 (9,9,9) 距离点 3,4,5 较近:

0 1:0.0 2:0.0 3:0.0
1 1:0.1 2:0.1 3:0.1
2 1:0.2 2:0.2 3:0.2
3 1:9.0 2:9.0 3:9.0
4 1:9.1 2:9.1 3:9.1
5 1:9.2 2:9.2 3:9.2

2.模型训练

    // 训练 Gaussian Mixture Model,并设置参数
    val gmm = new GaussianMixture()
      .setK(2)
    val model = gmm.fit(dataset)

主要参数就是 setK 设置聚类中心,实际场景下可以随机采样一些数据 plot 出来看看大致分几类,如果数据维度较高可以使用降维的方法,关于降维之前也写过:embedding 向量的降维与可视化 ,大家可以参考。下面看下 GMM 的参数:

aggregationDepth - 建议的树聚合深度(>=2) (default: 2)

featuresCol - 要素列名称 (default: features)

k: 混合模型中独立高斯数。必须大于1。(default: 2, current: 2)

maxIter:最大迭代次数(>=0)(default: 100)

predictionCol:预测列名称  (default: prediction)

probabilityCol:预测类条件概率的列名。注意:并非所有模型都能输出经过良好校准的概率估计值!这些概率应被视为置信度,而不是精确的概率 (default: probability)

seed:随机种子 (default: 538009335)

tol:迭代算法的收敛容差(>=0)(default: 0.01)

weightCol:权重列名称。如果未设置或为空,则将所有实例权重视为1.0  (undefined)

3.获取多个 GM

    // 逐个打印单个模型
    for (i <- 0 until model.getK) {
      println(s"Gaussian $i:\nweight=${model.weights(i)}\n" +
          s"mu=${model.gaussians(i).mean}\nsigma=\n${model.gaussians(i).cov}\n")
    }

    spark.stop()

拥有多个 GM 后,我们可以获取样本在不同聚类中心的概率值,取概率最高者作为样本对应 Cluster 即可。 

 

四.总结

理论上,不断增加 Guassion 模型可以拟合任何数据分布,而高斯混合模型聚类的本质也不再是聚类,而是通过模型描述一批数据的概率分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三方系统集成SF(SuccessFactors),实现单点登录要点

在笔者先前的文章——《基于saml2.0的平台&#xff08;适用多种平台&#xff09;单点登录配置&#xff0c;以okta为例》中&#xff0c;详细介绍了如何把一个自开发的三方系统&#xff0c;集成到okta或者IAS平台。 经过笔者的实际工作经验&#xff0c;发现SF自己本身其实也可以…

MCU-51:初识单片机,从点亮一个灯开始

题目一、什么是单片机二、点亮一个LED灯2.1 LED原理和知识2.2 方法一2.3 方法二一、什么是单片机 单片机又称单片微控制器&#xff0c;把一整个计算机系统集成到一个芯片上&#xff0c;当于一个微型的计算机&#xff0c;和计算机相比&#xff0c;单片机只缺少了I/O设备。一块芯…

文字语义纠错技术探索与实践-张健

背景 文本语义纠错的使用场景非常广泛&#xff0c;基本上只要涉及到写作就有文本纠错的需求。书籍面市前就有独立的校对的环节来保障出版之后不出现明显的问题。在新闻中我们也时不时看到因为文字审核没到位造成大乌龙的情况&#xff0c;包括上市公司在公开文书上把“临时…

并行计算(MPI + OpenMP)

文章目录并行计算MPI&#xff08;进程级并行&#xff09;基本结构数据类型点对点通信阻塞非阻塞非连续数据打包聚合通信Communicator & Cartisen GridOpenMP&#xff08;线程级并行&#xff09;简介基本制导语句worksharing constructSectionsSingleFor临界区 & 原子操…

React 学习笔记总结(三)

文章目录1. React( v16.8 版本) 生命周期2. React( v16.8 版本) 生命周期 更新流程2.1 三个更新流程2.2 setState()的生命周期流程(对应上图2号线)2.3 forceUpdate()的生命周期流程(对应上图3号线)2.4 父组件render()渲染的生命周期流程(对应上图1号线)2.5 React( v16.8 版本)生…

“学了一个我不感兴趣的专业,要不要转行IT?”

“这个专业太无聊了&#xff0c;我想转行……” “你想转去干什么&#xff1f;” “我对金融感兴趣&#xff0c;听说金融很赚钱&#xff0c;我想学金融……” “你感兴趣为什么课后不去钻研&#xff0c;而要选择打游戏&#xff1f;” “以后再慢慢来嘛……” “可是你已经…

报表工具-FineReport JS实现参数面板显示对应数据

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 预期效果 1.3 实现思路 对照填报界面的章节&#xff0c;在参数界面也用 SQL 语句实现对应数据的展示 &#xff0c;当第一次打开模板时&#xff0c;标签不显示可以通过JS 控制实现。 2. 示例 2.1 新建模板 新建普通…

设计模式-牛刀小试01

前言 本文为datawhale2022年12月组队学习《大话设计模式》task4打卡学习&#xff0c;本次完成homework1。 【教程地址】https://github.com/datawhalechina/sweetalk-design-pattern 一、任务描述 1.1 背景 小李已经是一个工作一年的初级工程师了&#xff0c;他所在的公司是…

靶机练习——vulnstack1

下载地址&#xff1a;http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 注意事项 密码一定要设置为不同的 部署环境 根据红日安全出具的wp&#xff0c;我们只需要设置两个C段即可&#xff0c;分别是外网的72和内网的52&#xff0c;这里直接添加新的网络以及子网地址即可&…

十三、DockerFile构建增强版本centos7

1、概述 在Docker 常用命令篇中&#xff0c;我们已经知道了2中构建镜像的方式 export\import 和 commit方式。这两种方式都需要先运行并创建容器&#xff0c;然后在容器中安装vim、ifconfig等命令&#xff0c;然后再重新构建加强版的镜像&#xff0c;比较麻烦。Dockerfile通过…

2022CTF培训(九)MIPS PWN环境搭建MIPS PWN入门

附件下载链接 环境搭建 在 ARM PWN 环境搭建 的基础上&#xff0c;首先安装具备MIPS交叉编译gcc与MIPS程序动态链接库&#xff1a; sudo apt-get install gcc-mips-linux-gnu sudo apt-get install gcc-mipsel-linux-gnu sudo apt-get install gcc-mips64-linux-gnuabi64 su…

【CANN训练营第三季】Ascend平台体验Pytorch笔记

模型迁移 手册地址&#xff1a;https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/600alpha002/ptmoddevg/ptmigr/ptmigr_000009.html 主要修改&#xff1a; 导入相关库 import torch import torch_npu #1.8.1及以上需要指定NPU设备 通过device()指定 …

JDBC编程步骤、JDBC API详解和数据库连接池

前言&#xff1a; JDBC 就是使用Java语言操作关系型数据库的一套API &#xff0c;全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接。官方&#xff08;sun公司&#xff09;定义的一套操作所有关系型数据库的规则&#xff0c;即 接口各个数据库厂商去实现这套…

工具及方法 - Process Explorer以及类似工具,用来获取系统运行的进程信息

下载Process explorer&#xff1a; Process Explorer - Sysinternals | Microsoft Learn Process explorer简介 有没有想过哪个程序打开了一个特定的文件或目录&#xff1f;现在你可以找到了。Process Explorer向你显示关于进程打开或加载的句柄和DLL的信息。 Process Explore…

[Python图像处理] 使用 HSV 色彩空间检测病毒对象

使用 HSV 色彩空间检测病毒对象前言检测病毒对象相关链接前言 在本节中&#xff0c;我们将学习如何使用 OpenCV 在 HSV 色彩空间中使用特定颜色检测感兴趣对象。我们需要通过指定颜色值范围识别和提取感兴趣的对象&#xff0c;使用具有病毒的血细胞图像&#xff0c;我们的目标…

Python 自动化测试(五): Pytest 结合 Allure 生成测试报告

本文节选自霍格沃玆测试学院测试开发内部教材&#xff0c;进阶学习文末加群&#xff01; 测试报告在项目中是至关重要的角色&#xff0c;一个好的测试报告&#xff1a; 可以体现测试人员的工作量&#xff1b; 开发人员可以从测试报告中了解缺陷的情况&#xff1b; 测试经理可…

7.Linux实用操作(2)

文章目录零、学习目标一、进程管理1、概念2、查看进程3、查看指定进程4、关闭进程二、主机状态1、查看系统资源占用2、top命令内容详解3、top命令选项4、top交互式选项5、磁盘信息监控三、上传、下载1、上传、下载2、rz、sz命令四、压缩、解压1、压缩格式3、tar命令4、tar 命令…

后端开发浅学react

博客笔记来自于学习 柴柴老师在b站分享的react学习视频&#xff0c;仅供学习参考&#xff0c;学习视频是来自于b站的&#xff1a;柴柴_前端教书匠&#xff0c;视频链接&#xff1a;React入门到实战(2022全网最新&#xff09;_哔哩哔哩_bilibili 和 react官网 开始 – React …

谁会嫌钱多啊,最适合学生党的Python兼职攻略以及接私活经验

大家好&#xff0c;我是小八 这次我想谈谈一个非常热门的话题&#xff0c;就是如何在学习python的同时去赚钱。在这篇文章中&#xff0c;你会学习到如何通过学习python来赚取副业收入。 相信大家都对钱感兴趣吧&#xff0c;如果你和马云爸爸对钱不敢兴趣的话&#xff0c;那这…

Lambda表达式从用到底层原理

文章目录前言一、lambda函数基本使用参数列表返回类型函数体捕获列表值捕获引用捕获隐式捕获混合方式捕获修改值捕获变量的值异常说明二、lambda表达式使用的注意事项避免默认捕获模式三、lambda表达式底层实现原理采用值捕获采用引用捕获前言 lambda式作为一种创建函数对象的…