Note sth about GMM(Gaussian Mixtrue Model)
高斯混合模型的终极理解
高斯混合模型(GMM)及其EM算法的理解
这两篇博客讲得挺好,同时讲解了如何解决GMM参数问题的EM算法,其实GMM式子没有什么高深的地方,都是概率论的东西,主要是构思比较巧妙。

动机:
 GMM是用来拟合某种分布的。哪种?任意一种!当然,前提是参数足够多的情况下,所以实作其实并非拟合任意模型。那么一般什么样的模型会被GMM较好拟合?首先,我们思考一下一维的高斯分布(即正态分布),然后我们思考一下二维的,三维的……会发现,高斯分布在二维类似椭圆,三维类似椭球,而这也是我理解它为什么说可以拟合任意分布的原因。因为椭圆(我们从二维来说),其实就是实轴(a)和虚轴(b)决定的一种图形,那么如果$a=b$就世缘,而如果$a \gg b$或者$a \ll b$,其实就非常得趋近于直线了。当然这是一个高斯分布的情况,而GMM本质就是混合(Mixtrue)了很多的高斯分布(Gaussian Model),然后保证权重和为1即可(单高斯分布也可看成是GMM的特殊情况,即某个权重为1,其余均为0)。
 GMM算法过程没什么描述,流程就在公式里,本质就是用多个高斯分布的和去拟合我们目前拿到的样本数据(TrainingData)。

GMM算法公式概述:只打GMM的部分公式,EM的实在太长了,但强烈建议纸上手推
高斯混合模型的概率密度函数:
$$ p(y|\theta) = \sum_{k=1}^{K} \alpha\phi(y|\theta_k) $$
where
$$ \phi(y|\theta_k) \Leftrightarrow \phi(y|\theta_k) = \frac{1}{\sqrt{2\pi}\sigma_k} exp(-\frac{(y-\mu_k)^2}{2\sigma_k^2}) $$
$$ \alpha \geq 0 \quad and\quad \sum_{k=1}^{K}\alpha_k = 1, \qquad \theta_k = (\mu_k, \theta_k) $$
顺带写一写对其做极大似然估计的过程:
$$ p(x; \theta) = \sum_{k=1}^{K} \pi_kN(x;\mu_i,\sigma_k) \qquad s.t.\quad \sum_{k=1}^{K} \pi_k=1 $$
$$ P(x; \theta) = \prod_{i=1}^{N}p(x_i;\theta) $$
$$ lnP(x; \theta) = \sum_{i=1}^{N} ln( \sum_{k=1}^{K}\pi_kN(xi;\theta_k) ) $$
This formula, you will get ;_; if you try to caculate it's gradient, because it need reduction of fractions to a commomn denominator.It may make you mad,at least it made me mad.

细节理解:
 1、为何$\sum_{k=1}{K} \alpha_k=1$,因为概率密度函数的定义域内积分要为1,显然GMM必须满足这个性质,而分配权重和为1,就可以满足这个性质,因为求积分可以分开求,最后累加,而每个分布的积分都是1,乘以和为1的权重,最后和才会为1。
 2、为何需要EM算法,MLE不可以么?其实是先尝试过MLE,就会发现需要EM,因为在做MLE(手写)的时候会遇到一个问题(其实就是求出似然函数之后,取完对数发现需要求导的部分是$\sum ln (\sum)$这种形式,显然求导非常难算,可以简单想想,分式,或许需要通分,然后有N个式子。。。)。第一篇之中的“第二个细节”就是说的这个问题。
 3、其实细想可以发现,在用EM的时候的一个假设很玄妙,他假设每个样本都是被GMM多个高斯分布结果中的某一个产生的,这样的假设合理么?合理——因为好算,因为我们可以加大参数让每个都拟合(可以拟合任意分布。。。)不合理——显然现实中决定某种事物出现的因素往往都是不唯一的。(虽然高斯分布已经是考虑了诸多微小影响之下的一种分布,我记得课本写过(大致意思):在譬如人的心情、人的操作失误、气温等一系列微小影响下,样本可以看作是服从正态分布的)。不得不说,GMM作为一种方法做到了很好的效果和深度(拟合任意分布),但是个人总觉得会遇一些极端情况。但是也想通了一点——本来就是预测,意外样本就是降低准确率的来源,哪有100%的预测。(不然不就每个人都去买股票致富了)

ML_Review_GMM(Ch10)的更多相关文章

  1. 20155211课下测试ch10补交

    20155211课下测试ch10补交 1.假设下面代码中的foobar.txt中有6个ASCII字母,程序的输出是() A.c = f B.c = o C.c = b D.c = 随机数 答案:A 解 ...

  2. 2017-2018-1 20155331 课下测试(ch10)

    2017-2018-1 20155331 课下测试(ch10) 假设下面代码中的foobar.txt中有6个ASCII字母,程序的输出是(A) Image 7.png A . c = f B . c ...

  3. CH10 泛型算法

    概述 大多数算法都定义在algorithm头文件中. Note:算法永远不会执行容器操作 泛型算法本身不会执行容器的操作,而是通过迭代器来访问.修改等操作 10.1 题目要求读取数据存入vector, ...

  4. Hadoop 裡的 fsck 指令

    Hadoop 裡的 fsck 指令,可檢查 HDFS 裡的檔案 (file),是否有 corrupt (毀損) 或資料遺失,並產生 HDFS 檔案系統的整體健康報告.報告內容,包括:Total blo ...

  5. 【JAVA并发编程实战】8、锁顺序死锁

    package cn.study.concurrency.ch10; public class Account { private String staffAccount; //账号 private ...

  6. 网络分析之Pgrouting(转载)

    网上关于Pgrouting的使用介绍太简单了,这里想详细的总结一下Pgrouting的使用,其实主要参照官方文档:http://workshop.pgrouting.org/ 第一步:配置环境 关于P ...

  7. 20145233 2016-2017 1 linux题目总结

    20145233 2016-2017 1 linux题目总结 第一周考试知识汇总 判断:实验楼环境中所有的默认系统用户名和密码均为 shiyanlou.(x ). 填空:Linux Bash中,Ctr ...

  8. <<Numerical Analysis>>笔记

    2ed,  by Timothy Sauer DEFINITION 1.3A solution is correct within p decimal places if the error is l ...

  9. 转 Selenium+Python+Eclipse网页自动化集成环境配置(附简单的测试程序)

    1 JDK.Python环境变量配置  下载JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html,直接双击安装, ...

随机推荐

  1. JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏

    new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...

  2. 理解JVM之java内存模型

    java虚拟机规范中试图定义一种java内存模型(JMM)来屏蔽掉各种硬件和操作系统内存访问差异,以实现让java程序在各种平台都能打到一致的内存访问效果.所以java内存模型的主要目标是定义程序中各 ...

  3. 修改ssh的22端口

    将ssh22端口修改为12345 https://www.cnblogs.com/chen-lhx/p/3974605.html # iptables开放12345端口iptables -I INPU ...

  4. django 发帖时碰到的图片上传

    所用编辑器 [wangEditor.js] 图片上传接口 '/edit/image/' 返回内容  参照 https://www.kancloud.cn/wangfupeng/wangeditor3/ ...

  5. HttpContext & HttpRuntime

    问题引出 HttpContext.Current.Cache .VS. HttpRuntime.Cache HttpRuntime.Cache:获取当前应用程序的Cache HttpContext.C ...

  6. SQL SERVER-孤立用户

    --SQL SERVER用户管理分为两层,实例级的login和数据库级的用户 --login的SID和数据库用户的SID必须一样才行 --数据库搬迁login在重建时生成新的sid,与原来数据库的用户 ...

  7. C++——异常处理

    前言 大型和十分复杂的程序往往会产生一些很难查找的甚至是无法避免的运行时错误.当发生运行时错误时,不能简单地结束程序运行,而是退回到任务的起点,指出错误,并由用户决定下一步工作.面向对象的异常处理(e ...

  8. DNS服务——域名解析委派

    域名解析委派 域名解析委派和DNS域名解析递归查询很像,举个例子解释域名解析委派 ①假设在.net域名下有台计算机想要访问www.cac.com. ②.net这台DNS服务器不知道www.cac.co ...

  9. Centos7安装教程

    1.下载centos7的镜像 到华为云镜像官方网站下载https://mirrors.huaweicloud.com/ 2.创建虚拟机并载入镜像 3.开启虚拟机,正式安装 选择第一项:Install ...

  10. Kotlin基础特性深入讲解

    继续学习基础语法,在上次https://www.cnblogs.com/webor2006/p/11183077.html中定义了一个两数相加的函数,如下: 其实对于这个函数还可以进一步简写,因为函数 ...