热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

05EM算法高斯混合模型GMM

04EM算法-EM算法收敛证明__GMM__(GaussianMixtureModel,高斯混合模型)是指该算法由多个高斯模型线性叠加混合而成。每个高斯模型称之为component

04 EM算法 - EM算法收敛证明

__GMM__(Gaussian Mixture Model, 高斯混合模型)是指该算法由多个高斯模型线性叠加混合而成。每个高斯模型称之为component。

多个带有权重的高斯模型线性的叠加

__GMM算法__描述的是数据的本身存在的一种分布,即样本特征属性的分布,和预测值Y无关。显然GMM算法是无监督的算法,常用于聚类应用中,component的个数就可以认为是类别的数量。


回到昨天说的例子:随机选择1000名用户,测量用户的身高;若样本中存在男性和女性,身高分别服从高斯分布N(μ1,σ1)和N(μ2,σ2)的分布,试估计参数:μ1,σ1,μ2,σ2;

1、如果明确的知道样本的情况(即男性和女性数据是分开的),那么我们使用极大似然估计来估计这个参数值。

2、如果样本是混合而成的,不能明确的区分开,那么就没法直接使用极大似然估计来进行参数的估计。

我们可以认为当前的1000条数据组成的集X,是由两个高斯分布叠加而成的(男性的分布和女性的分布)。

男性和女性的高斯分布的叠加

在每个分布前乘以一个权重À

如果能找到一种办法把每一个高斯分布对应的参数π、 μ、σ求出来,那么对应的模型就求解出来了。

如果模型求解出来后,如何对数据进行聚类?

这个公式求出来的分别是男性和女性身高分布的概率密度,如果把π、 μ、σ都求出来,以后我们可以构建出一个__能够根据样本特征__计算出样本属于男性或女性的可能性。

实际做样本分类的时候,我们把样本X的特征x1~xn分别代入两个公式中,求出来的两个结果分别是:样本X的性别是男、是女的可能性。如果是男的可能性大于是女的可能性,我们就把样本X归入男性的分类。


假定__GMM__由k个Gaussian分布线性叠加而成,那么概率密度函数如下:

概率密度函数

分析第1个等式:
p(x): 概率密度函数,k个Gaussian分布线性叠加而成的概率密度函数。
∑p(k)p(x|k): k个某种模型叠加的概率密度函数。
p(k): 每个模型占的权重,即上面提到的π。
p(x|k): 给定类别k后,对应的x的概率密度函数。

__分析第2个等式:__目标 - 将公式写成高斯分布的样子。
__πk:__即p(k)
__p(x;μk,∑k):__多元高斯(正态)分布。有了观测数据x后,在__给定了条件__下的高斯分布。这个__条件__是__1、第k个分类的均值μk__; __2、第k个分类的方差∑k__;

深入分析p(x;μk,∑k)的参数:
如果样本有n个特征,所有的特征x1~xn一起服从一个多元的高斯分布(正态分布),所有特征的均值应该是一个向量 (μ1n);
μk: 第k个分类的情况下(第k个高斯分布的情况下对应的每一列的均值);μk = (μk1kn)

k: 协方差矩阵(对称阵)。现在有n个特征,协方差矩阵是一个n×n的矩阵。现在我们要算的是:

cov(x1,x1),cov(x1,x2),...,cov(x1,xn)

cov(x2,x1),cov(x2,x2),...,cov(x2,xn)
....
cov(xn,x1),cov(x1,x2),...,cov(xn,xn)

其中,__对角线__ cov(x1,x1)、cov(x2,x2), ... ,cov(xn,xn)中,x1和x1的协方差 = x1的方差;即cov(x1,x1) = var(x1);所以__对角线上两个特征的协方差 = 对应的特征的方差。__

协方差 - 知识补充

__协方差__(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。

协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

总结 - 公式


理解了公式后,再来看看公式在图像上是如何体现的:

蓝1 + 蓝2 = 红

如果样本X只有一个特征x1,在二维的坐标系上的表示出来。特征x1是由n个单变量样本的高斯分布叠加而成的。向量x1k = ∑k (x1(1),x1(2),~,x1(n)),如k=(男、女),累加男性分类下的特征高斯分布和女性分类下的高斯分布;

图中__红色曲线__表示原有数据的分布情况,我认为这个原有数据是由多个比较的高斯分布叠加而成的,__蓝色曲线__ 表示单个单个高斯分布的分布情况。向量x1 = (x1(1),x1(2),~,x1(n));

PS: 蓝1+蓝2=红 体现的就是公式 p(x) = ∑πp(x;μ,∑k);


在得知数据的特征 x=(x1~xn) 后,如果我们想把数据合理得聚类到一个分类中,我们该如何去计算呢?

既然我已经得到了k个高斯分布对应的概率密度函数(现在设k=3,共3个分类),将当前特征的x=(x1~xn)代入我们的概率密度函数: p(x) = ∑πp(x;μ,∑k);

p(蓝1)+p(蓝2)+p(蓝3) = 红

我们分别计算p(蓝1)、p(蓝2)、p(蓝3),蓝色三条线各对应k分类中的一个,哪个数大,我认为当前的样本该分到哪一类。


GMM算法的两个前提:
1、数据服从高斯分布;
2、我们人为定义了分类个数k。

基于这两个前提,问题递进:

问:我们人为假定了高斯分布的分类个数k,就类似于我们聚簇时分的聚簇中心个数一样。参数π、μ、σ该如何求出来?

答:和K-Means算法一样,我们可以用__EM算法__来求解这个问题。 GMM也满足EM算法的聚类思想,首先人为得定义了聚类的个数k,从数据特征X中发掘潜在关系的一种模型。而且我还默认数据是服从多个高斯分布的。

GMM算法中的隐含条件是:第k个模型占的权重 - $color{red}{π}$、 第k个高斯分布的情况下对应的每一列的均值 - $color{red}{μ}$、协方差矩阵 cov(xi,xj) - $color{red}{∑k}$;因为本质上我们是知道数据原有的分类状况的,只是无法观测到隐含在数据中的这些特性,使用EM的思想可以迭代得求解出这些隐含变量。

对联合概率密度函数求对数似然函数:

对联合概率密度函数求对数后,原本__连乘__的最大似然估计变成了__连加__的函数状态。

EM算法求解 - E步:

E步 - 公式

套用公式后,我们可以假定隐含变量z的分布:Q(z(i) = j);
我们认为分布wj(i) = 第i个观测值对应的隐含分类第z(i)类; = 以(看不见的参数π、μ、∑)为参数的情况下,输入第i观测值的特征x后得到的分类z(i)类;

EM算法求解 - M步:
M步第1行就是上一章通过化简找到__下界__的那个函数:

M步 - 第1行就是通过化简找到下界的那个函数

M步 - 第1行就是昨天我们推导这些公式

M步 - 公式

一维正态分布 - 知识补充,背出来

多维正态分布 - 对比一维单变量时的正态分布公式,有多少个特征n就等于多少。k是指属于第几类高斯分布。


如果要分别求解三个未知变量, 则需要对每一个未知变量求偏导。

在公式中需要求的未知量有三个

1、对均值求偏导:

求解第l个分类下均值的向量

对均值求偏导

2、对方差求偏导:

对方差求偏导

3、对概率使用拉格朗日乘子法求解:

对概率使用拉格朗日乘子法求解


$color{red}{本章最重要的是记住下面的内容:}$

记住这三个公式

一维正态分布 - 知识补充,背出来

多维正态分布 - 对比一维单变量时的正态分布公式,有多少个特征n就等于多少。k是指属于第几类高斯分布。

06 EM算法 - 案例一 - EM分类初识及GMM算法实现



推荐阅读
  • 本文介绍了读写锁(RWMutex)的基本概念、实现原理及其在Go语言中的应用。读写锁允许多个读操作并发执行,但在写操作时确保互斥,从而提高并发性能。 ... [详细]
  • SwipeRefreshLayout 是一个常用的刷新控件,可以包裹一个可滑动的子控件(如 ListView 或 RecyclerView)以实现竖直滑动时的页面刷新。然而,它本身并不支持上拉加载更多。本文将介绍如何通过继承 SwipeRefreshLayout 来实现这一功能。 ... [详细]
  • 异步复位、同步复位及异步复位同步释放详解
    本文详细介绍了三种常见的复位方式:异步复位、同步复位和异步复位同步释放。每种复位方式都有其特定的应用场景和优缺点。通过代码示例和仿真结果,帮助读者更好地理解和应用这些复位技术。 ... [详细]
  • 本文详细介绍了如何对一个整数的二进制表示进行逆序操作。通过多种方法,包括直接法、查表法和分治法,帮助读者全面理解和掌握这一技术。 ... [详细]
  • 本文将深入探讨C语言代码的可重用性,解释其重要性和实现方法。通过具体示例,我们将展示如何通过封装和模块化设计提高代码的可重用性。 ... [详细]
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • 本文探讨了数据结构与算法之间的关系,从基本概念入手,逐步解析二者如何相辅相成,共同构建高效的计算机程序。文中结合实际案例,对数据结构和算法进行了详细说明,并提出了一些思考问题。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 本文探讨了SSD购买后是否需要进行4K对齐的问题,并详细解释了4K对齐的原理及其重要性。通过对比机械硬盘与固态硬盘的结构,文章深入分析了4K对齐对SSD性能的影响,并提供了具体的对齐方法。 ... [详细]
  • 本文介绍了在Java中遍历HashMap的三种常见方法:使用entrySet()、keySet()以及Java 8引入的forEach。每种方法都有其特点和适用场景。 ... [详细]
  • Python环境中字体放大的解决方法
    在使用Python开发环境时,有时会遇到无法通过Ctrl+鼠标滚轮放大字体的问题。本文将介绍如何在不同环境下解决这一问题,包括在没有Settings选项的情况下的替代方案。 ... [详细]
  • 优先队列是一种特殊的队列,不遵循先进先出原则。它分为最大优先队列和最小优先队列。最大优先队列总是将当前最大的元素优先出队,而最小优先队列则总是将当前最小的元素优先出队。本文将详细介绍如何使用二叉堆在C#中实现这两种优先队列。 ... [详细]
  • 近年来,区块链技术备受关注,其中比特币(Bitcoin)功不可没。尽管数字货币的概念早在上个世纪就被提出,但直到比特币的诞生,这一概念才真正落地生根。本文将详细探讨比特币、以太坊和超级账本(Hyperledger)的核心技术和应用场景。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 今日深入研究了树状数组,感觉难度较大,通过课件和博客辅助学习,仍有许多疑惑。主要探讨了老师推荐的三道题目,初步掌握了树状数组的基本用法。同时,还学习了逆序数和离散化的概念及其应用。 ... [详细]
author-avatar
1257523034_627418
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有