EM算法和GMM算法的相关推导及原理
极大似然估计
我们先从极大似然估计说起,来考虑这样的一个问题,在给定的一组样本x1,x2······xn中,已知它们来自于高斯分布N(u, σ),那么我们来试试估计参数u,σ。
首先,对于参数估计的方法主要有矩估计和极大似然估计,我们采用极大似然估计,高斯分布的概率密度函数如下:

我们可以将x1,x2,······,xn带入上述式子,得:

接下来,我们对L(x)两边去对数,得到:

于是,我们得到了l(x)的表达式,下面需要对其计算极大值:

通过对目标函数的参数u,σ分别求偏导,很容易得到:

对于上述的结果,和矩估计是一样,它的含义就是:样本的均值即为高斯分布的均值,样本的方差即为高斯分布的方差。
通过上面的问题分析,我们来看这样的一个问题,假设在班级中随机挑选100名同学,并且测量了这100名同学的身高,如果这100个样本服从的是正态分布,那么我们可以用样本的均值和方差等于正态分布的均值和方差来估计参数u和σ。但是样本中存在男同学和女同学,它们分别服从N1(u1, σ1)和N2(u2, σ2)的分布,那么我们应该如何估计u1, σ1,u2, σ2参数呢?
我们可以通过假设随机变量x是有k个高斯分布混合而成,取各个高斯分布的概率的φ1,φ2,······φk,第i个高斯分布的均值为ui,方差为∑i。那么,我们可以建立如下目标函数:

上述的式子中,由于在对数函数中存在加和,无法直接求导计算极大值,我们可以将其分成两步:
第一步:估算数据来自哪个组份
估计数据是有哪个组份生成的概率,对于数据xi来说,它是由第k个组份生成的概率为:

在上面的式子中,u和∑是需要进行估计的,这里采用迭代法,在计算r(i,k)的时候,假定u和∑均为已知的,但是在第一次计算时,我们根据先验知识给定u和∑。
第二步:估计每个组份的参数
假设上一步中得到的r(i,k)就是正确的数据xi由组份k生成的概率,亦可以当做该组份在生成这个数据上所做的贡献,或者也可以看做xi其中r(i,k)*xi部分是由组份k所生成的。对于所有的数据点,现在司机上可以看作组份k生成了{γ(i,k)*xi|i=1,2,…N}这些点。组份k是一个标准的高斯分布,利用上面的结论:

EM算法的提出
假定有训练集{x1, x2,····xm},包含m个独立样本,要求从中找到该组数据的模型p(x, z)的参数。通过构建极大似然估计建立目标函数:

在上面的式子中,z是隐随机变量,直接找到参数的估计是很困难的。这里我们采用建立目标函数的下界,并且求该下界的最大值,不断的重复这个过程,直到收敛到局部的最大值。
Jensen不等式
令Qi是z的某一个分布,并且Qi>=0,有:

我们需要寻找尽量紧的下界,为了使得等式成立:


EM算法的整体框架

E-step

M-step

对上面的公式求偏导




由于多项分布的概率和为1,建立拉个朗日方程:

计算偏导:

EM算法和GMM算法的相关推导及原理的更多相关文章
- EM算法和GMM模型推导
- IRT模型的参数估计方法(EM算法和MCMC算法)
1.IRT模型概述 IRT(item response theory 项目反映理论)模型.IRT模型用来描述被试者能力和项目特性之间的关系.在现实生活中,由于被试者的能力不能通过可观测的数据进行描述, ...
- 使用Apriori算法和FP-growth算法进行关联分析
系列文章:<机器学习实战>学习笔记 最近看了<机器学习实战>中的第11章(使用Apriori算法进行关联分析)和第12章(使用FP-growth算法来高效发现频繁项集).正如章 ...
- Algorithm --> Kruskal算法和Prim算法
最小生成树之Kruskal算法和Prim算法 Kruskal多用于稀疏图,prim多用于稠密图. 根据图的深度优先遍历和广度优先遍历,可以用最少的边连接所有的顶点,而且不会形成回路.这种连接所有顶点并 ...
- 最短路径——Dijkstra算法和Floyd算法
Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...
- Prim算法和Kruskal算法的正确性证明
今天学习了Prim算法和Kruskal算法,因为书中只给出了算法的实现,而没有给出关于算法正确性的证明,所以尝试着给出了自己的证明.刚才看了一下<算法>一书中的相关章节,使用了切分定理来证 ...
- 强化学习中REIINFORCE算法和AC算法在算法理论和实际代码设计中的区别
背景就不介绍了,REINFORCE算法和AC算法是强化学习中基于策略这类的基础算法,这两个算法的算法描述(伪代码)参见Sutton的reinforcement introduction(2nd). A ...
- 最小生成树---Prim算法和Kruskal算法
Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...
- mahout中kmeans算法和Canopy算法实现原理
本文讲一下mahout中kmeans算法和Canopy算法实现原理. 一. Kmeans是一个很经典的聚类算法,我想大家都非常熟悉.虽然算法较为简单,在实际应用中却可以有不错的效果:其算法原理也决定了 ...
随机推荐
- RT-Thread—STM32—在线升级(Ymodem_OTA、HTTP_OTA)
概述 本教程主要根据官方推荐的教程进行改编,详细信息请参考OTA Downloader软件包STM32 通用 Bootloader 本例程通过自己实际搭建环境,测试总结. bootloader的制作 ...
- 今天,VS Code 五岁了。
时光飞逝,岁月如梭.今天,VS Code 迎来了 5 岁的生日. 回想起 VS Code 发布的那一天,仿佛还在昨天. 回顾 VS Code 这五年的发展,总是能给我们开发者带了无限的惊喜. 2015 ...
- ST3 package control
view-> showconsole (ctrl+`) import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775 ...
- 2019-2020-1 20199310《Linux内核原理与分析》第十一周作业
1.问题描述 在一个capability系统中,当一个程序运行时,对应的线程会初始化一系列capabilities(令牌).当线程尝试访问某个对象时,操作系统会检查该线程的capabilities,并 ...
- 【linux三剑客】sed命令
sed - stream editor for filtering and transforming text sed 流编辑器 strem edition,实现对文件的增删改替换查是Linux中第二 ...
- Spark学习笔记(一)
概念: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架. 支持用scala.java和Python等语言编写应用程序.相较于Hdoop,往往有更好的运行效率. Spark包括了 ...
- 以内存级速度实现存储?XPoint正是我们的计划
随着计算能力虚拟化技术的普及,存储机制在速度上远逊于内存这一劣势开始变得愈发凸显. 这一巨大的访问速度鸿沟一直是各项存储技术想要解决的核心难题:纸带.磁带.磁盘驱动器乃至闪存记忆体等等,而如今最新一代 ...
- iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API不兼容奔溃,模拟多继承)...
本文Demo传送门: MessageForwardingDemo 摘要:编程,只了解原理不行,必须实战才能知道应用场景.本系列尝试阐述runtime相关理论的同时介绍一些实战场景,而本文则是本系列的消 ...
- Clickhouse 时区转换
Clickhouse 时区转换 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). OLAP场景的关键特征 大多数是读请求 数据总是以相当大的批(> 1000 ...
- 百度Openrasp开源的应用运行时自我保护产品,安装教程。
第一步: 下载最新版本的安装包 https://packages.baidu.com/app/openrasp/release/latest/rasp-php-linux.tar.bz2 解压到目录: ...