机器学习算法(二十九):高斯混合模型(Gaussian Mixed Model,GMM)

article/2025/10/12 9:34:05

目录

1 混合模型(Mixture Model)

2 高斯模型

2.1 单高斯模型

2.2 高斯混合模型

3 模型参数学习

 3.1 单高斯模型

3.2 高斯混合模型

 4 高斯混合模型与K均值算法对比


1 混合模型(Mixture Model)

       混合模型是一个可以用来表示在总体分布(distribution)中含有 K 个子分布的概率模型,换句话说,混合模型表示了观测数据在总体中的概率分布,它是一个由 K 个子分布组成的混合分布。混合模型不要求观测数据提供关于子分布的信息,来计算观测数据在总体分布中的概率。

2 高斯模型

2.1 单高斯模型

        当样本数据 X 是一维数据(Univariate)时,高斯分布遵从下方概率密度函数(Probability Density Function)

        

        其中  为数据均值(期望),  为数据标准差(Standard deviation)。 

        当样本数据 X 是多维数据(Multivariate)时,高斯分布遵从下方概率密度函数:

        

        其中,  为数据均值(期望),  为协方差(Covariance),D 为数据维度。

2.2 高斯混合模型

        高斯混合模型可以看作是由 K 个单高斯模型组合而成的模型,这 K 个子模型是混合模型的隐变量(Hidden variable)。一般来说,一个混合模型可以使用任何概率分布,这里使用高斯混合模型是因为高斯分布具备很好的数学性质以及良好的计算性能。

        说起高斯分布,大家都不陌生,通常身高、分数等都大致符合高斯分布。因此,当我们研究各类数据时,假设同一类的数据符合高斯分布,也是很简单自然的假设;当数据事实上有多个类,或者我们希望将数据划分为一些簇时,可以假设不同簇中的样本各自服从不同的高斯分布,由此得到的聚类算法称为高斯混合模型。

        高斯混合模型的核心思想是,假设数据可以看作从多个高斯分布中生成出来的。在该假设下,每个单独的分模型都是标准高斯模型,其均值和方差是待估计的参数。此外,每个分模型都还有一个参数,可以理解为权重或生成数据的概率。高斯混合模型的公式为 

         

        高斯混合模型是一个生成式模型。可以这样理解数据的生成过程,假设一个最简单的情况,即只有两个一维标准高斯分布的分模型N(0,1)和N(5,1),其权重分别为0.7和0.3。那么,在生成第一个数据点时,先按照权重的比例,随机选择一个分布,比如选择第一个高斯分布,接着从N(0,1)中生成一个点,如−0.5,便是第一个数据点。在生成第二个数据点时,随机选择到第二个高斯分布N(5,1),生成了第二个点4.7。如此循环执行,便生成出了所有的数据点。

模型参数学习

 3.1 单高斯模型

        对于单高斯模型,我们可以用最大似然法(Maximum likelihood)估算参数  的值, 

         

         这里我们假设了每个数据点都是独立的(Independent),似然函数由概率密度函数(PDF)给出。

        

        由于每个点发生的概率都很小,乘积会变得极其小,不利于计算和观察,因此通常我们用 Maximum Log-Likelihood 来计算(因为 Log 函数具备单调性,不会改变极值的位置,同时在 0-1 之间输入值很小的变化可以引起输出值相对较大的变动):

        

3.2 高斯混合模型

        对于高斯混合模型,Log-Likelihood 函数是:

        

         如何计算高斯混合模型的参数呢?这里我们无法像单高斯模型那样使用最大似然法来求导求得使 likelihood 最大的参数,因为对于每个观测数据点来说,事先并不知道它是属于哪个子分布的(hidden variable),因此 log 里面还有求和,对于每个子模型都有未知的  ,直接求导无法计算。需要通过迭代的方法求解

        通常我们并不能直接得到高斯混合模型的参数,而是观察到了一系列数据点,给出一个类别的数量K后,希望求得最佳的K个高斯分模型。因此,高斯混合模型的计算,便成了最佳的均值μ,方差Σ、权重π的寻找,这类问题通常通过最大似然估计来求解。遗憾的是,此问题中直接使用最大似然估计,得到的是一个复杂的非凸函数,目标函数是和的对数,难以展开和对其求偏导。

        在这种情况下,可以用上一节已经介绍过的EM算法框架来求解该优化问题。 

        EM算法是在最大化目标函数时,先固定一个变量使整体函数变为凸优化函数,求导得到最值,然后利用最优参数更新被固定的变量,进入下一个循环。具体到高斯混合模型的求解,EM算法的迭代过程如下。 

        首先,初始随机选择各参数的值。然后,重复下述两步,直到收敛。 

(1)E步骤。根据当前的参数,计算每个点由某个分模型生成的概率。 

(2)M步骤。使用E步骤估计出的概率,来改进每个分模型的均值,方差和权重。

        也就是说,我们并不知道最佳的K个高斯分布的各自3个参数,也不知道每个数据点究竟是哪个高斯分布生成的。所以每次循环时,先固定当前的高斯分布不变,获得每个数据点由各个高斯分布生成的概率。然后固定该生成概率不变,根据数据点和生成概率,获得一个组更佳的高斯分布。循环往复,直到参数的不再变化,或者变化非常小时,便得到了比较合理的一组高斯分布。

        通过 EM 迭代更新高斯混合模型参数的方法(我们有样本数据  和一个有  个子模型的高斯混合模型,想要推算出这个高斯混合模型的最佳参数):

  • 首先初始化参数
  • E-step:依据当前参数,计算每个数据  来自子模型  的可能性:

         

  •  M-step:计算新一轮迭代的模型参数

        

  • 重复计算 E-step 和 M-step 直至收敛 (  ,  是一个很小的正数,表示经过一次迭代之后参数变化非常小)

        至此,我们就找到了高斯混合模型的参数。需要注意的是,EM 算法具备收敛性,但并不保证找到全局最大值,有可能找到局部最大值。解决方法是初始化几次不同的参数进行迭代,取结果最好的那次。

 4 高斯混合模型与K均值算法对比

         高斯混合模型与K均值算法的相同点是:

  • 它们都是可用于聚类的算法;
  • 都需要指定K值;
  • 都是使用EM算法来求解;
  • 都往往只能收敛于局部最优。

         而它相比于K均值算法的优点是:

  • 可以给出一个样本属于某类的概率是多少;
  • 不仅仅可以用于聚类,还可以用于概率密度的估计;
  • 并且可以用于生成新的样本点。 

 高斯混合模型(GMM) - 知乎


http://chatgpt.dhexx.cn/article/vGnlIFuf.shtml

相关文章

重启虚拟机异常:Unmount and run xfs_repair

重启虚拟机异常:Unmount and run xfs_repair 解决办法: 原因:看出来应该是sda3分区损坏,修复就可以了 1:启动虚拟机E进入单用户模式 2:在linux16开头的哪一行后面添加rd.break,ctrlx进入救援模式…

Unmount and run xfs_repair

开启虚拟机报错:Unmount and run xfs_repair 从错误可以查看到是vda3错误。 解决办法: 1、umount /dev/vda3 2、xfs_repair -L /dev/vda3 3、reboot 就ok了。

Linux mount/unmount命令

开机自动挂载 如果我们想实现开机自动挂载某设备,只要修改/etc/fstab文件即可。 文件挂载的配置文件:/etc/fstab 查看此文件可知 每行定义一个要挂载的文件系统; 其每行的格式如下 要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项…

android.permission.MOUNT_UNMOUNT_FILESYSTEMS添加权限报错

<!--这是在sd卡内创建和删除文件权限--> <uses-permission android:name"android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name"android.permission.WRITE_SETTINGS" /> 出现报错有两种解决方法&#xff1…

Centos7 虚拟机非法关机导致系统无法启动报Unmount and run xfs_repair的解决方法

1&#xff0c;电脑不正常启动导致我的虚拟机无法启动&#xff0c;报以下错误Unmount and run xfs_repair&#xff0c;大概意思是xfs文件系统出现问题了&#xff0c;导致无法挂载&#xff0c;需要使用xfs_repair进行修复。 2&#xff0c;执行如下命令 xfs_repair /dev/mapper/c…

linux下unmount了移动硬盘之后,硬盘灯还是常亮并且硬盘还在一直转动

linux下unmount了移动硬盘之后&#xff0c;硬盘灯还是常亮并且硬盘还在一直转动 ​ 参考:https://www.zhihu.com/question/23362385 希捷2T移动硬盘 在windows下卸载硬盘之后硬盘灯就不亮了&#xff0c;手摸也没有震动感。 在ubuntu下卸载硬盘之后&#xff0c;硬盘灯仍然常…

centos7异常断电,重启提示Unmount and run xfs_repair

周末服务器由于阵列卡问题&#xff0c;异常重启&#xff0c;重启后前台异常报错&#xff0c;提示磁盘元数据问题&#xff0c;需要修复 如故障图所示&#xff0c;sdb1&#xff0c;sdf1&#xff0c;sdi1 3块磁盘出现问题&#xff0c; 下面的解决办法&#xff1a; 解决办法&…

Android/C/C++ 中解决 USB UnMount(禁止USB端口)

引&#xff1a;因为某些特殊需求&#xff0c;需要在某些设备接入车机的时候&#xff0c;动态UnMount USB设备&#xff0c;因为代码其中有一些方法是自定义过的&#xff0c;所以该文章仅供思路参考。 &#xff08;20200319 更新&#xff09;&#xff1a;在后续跟进中&#xff0…

linux移动硬盘unmount报错处理

备份数据用的移动硬盘unmount时报&#xff1a; 通过fuser命令来kill掉设备进程&#xff0c;再unmount移动设备 先看fuser命令帮助信息&#xff1a; [rootathenadb2 ~]# fuser -helpUsage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME... [ - ] [ -n SPAC…

虚拟机 报错:Unmount and run xfs_repair

1&#xff0c;启动虚拟机的时候&#xff0c;摁 E 键 找到linux16 这一行(在fi下一行) 的最后&#xff0c;添加&#xff1a; rd.break 摁 &#xff1a;ctrlx进入救援模式 2&#xff0c;执行&#xff1a;umount /dev/sda3 xfs_repair -L /dev/sda3 …

VMware 安装Centos7 虚拟机 报Unmount and run xfs_repair

VMware 安装Centos7 虚拟机 报Unmount and run xfs_repair 问题描述 安装完虚拟机后重启无法进入用户登录界面 报错&#xff1a;Unmount and run xfs_repair 原因&#xff1a; dm-0分区损坏 解决办法 卸载目录 umount /dev/mapper/centos-root 修复目录 xfs_repair -L…

linux 开机遇见unmount and run xfs_repair

vmware 开机提示 看不懂反正提示 dm-0 没有正确挂载&#xff0c;需要修复 直接上干货执行如下两条命令 ls -l /dev/mapper xfs_repair /dev/mapper/cl_root 或是 xfs_repair -L /dev/mapper/cl_root echo $? 如果返回零&#xff0c;代表成功 最后重启服务器即可 init 6

Linux虚拟机(lvm)报Unmount and run xfs_repair

原因&#xff1a;因为突然断电&#xff0c;导致机器关闭 结果&#xff1a;发现有一台虚拟机无法启动&#xff0c;一直报错 Unmount and run xfs_repair 分析&#xff1a;主机异常掉电后里面的虚拟机无法启动&#xff0c;主要是损坏的分区 解决办法&#xff1a; 原因&#x…

Ubuntu远程装载硬盘Mount and unmount disk

小虎本来以为Ubuntu&#xff08;Linux系统&#xff09;不能够远程装载硬盘&#xff0c;每次重开机都要线下重新装载硬盘。但是苦于工作站不在身边&#xff0c;跑来跑去太麻烦&#xff0c;所以想远程装载一下。 解决方法 遍历搜索所有硬盘。找到对应名字。 lsblk创建一个文件…

mount unmount oracle,umount- 0506-349 Cannot unmount -dev-cd0- The requested reso

umount- 0506-349 Cannot unmount -dev-cd0- The requested reso (2011-12-21 04:20:37) 标签&#xff1a; requested 杂谈 umount: 0506-349 Cannot unmount /dev/cd0: The requested reso请问&#xff1a;我在安装oracle的时候&#xff0c;当系统提示我放入第二张光盘的时候&…

umount卸载磁盘_如何使用umount命令在Linux,Ubuntu,CentOS中卸载磁盘

umount卸载磁盘 Linux distributions like Ubuntu, Debian, CentOS, RHEL, and others use disks by mounting them to the file system. We have already examined mount command in the following tutorial. In this tutorial we will learn how to umount the disk in a Lin…

Linux之磁盘管理df、du、mount 、unmount 命令

1、Linux磁盘管理常用命令为 df、du df &#xff1a;列出文件系统的整体磁盘使用量du&#xff1a;检查磁盘空间使用量 2、df 列出文件系统的整体磁盘使用量 df命令参数功能&#xff1a;检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目…

strtok 函数

C 库函数 - strtok() C 标准库 - <string.h> 描述 C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串&#xff0c;delim 为分隔符。 声明 下面是 strtok() 函数的声明。 char *strtok(char *str, const char *delim) 参数 str -…

C语言strstr函数与strtok函数详解

C语言strstr函数与strtok函数详解 前言一、strstr函数1.函数原型2.函数参数、返回值解析3.strstr 函数模拟实现 二、strtok函数1.函数原型2.函数参数、返回值解析3.注意事项3.strtok 函数实现 前言 strstr() 函数与 strtok() 函数都属于字符串查找函数。 一、strstr函数 1.函…

strtok函数的实现(分步详细解释配图)

目录 函数大概的运行实现 1.定义一些变量 2.开始的一些条件 3.去掉pc前面一些需要被剪掉的字符 4.返回值ret的初始化 5.找到下一个分隔符 5.补\0 6.结束返回 完整代码 头文件&#xff1a;#include <string.h> 定义函数&#xff1a;char * strtok(char *s, co…