一. 例子讲解

假设有两个硬币1和2,随机抛出后出现正面概率为

。每次取一枚银币,连续抛5次,共抛5轮,数据如下:
  • 硬币1-->(3正2反);硬币2-->(2正3反);硬币3-->(1正4反);银币4-->(3正2反);银币5-->(2正3反)

很容易计算硬币1正面

的概率

假如我们不知道选出的是哪个银币,还需要计算出

,该如何处理?数据如下:
  • ?-->(3正2反);?-->(2正3反);?-->(1正4反);?-->(3正2反);?-->(2正3反)

对每个问号编个号(

),
表示第1次选择的是硬币1还是硬币2,后面依次类推。在这种情况下该如何计算

先随机初始化一个

,用它来估算z,然后基于z用最大似然概率去估计新的
,如新的
和估计的
相等,则我们证明我们估计正确,否则用新的出的
再去估算z,重复直到收敛。

初始设

。其中第一组硬币1出现的概率:
,其它数据如下则数据如下。
  • 硬币1概率:0.00512,硬币2概率:0.03087-->(3正2反); 硬币1概率:0.02048,硬币2概率:0.01323-->(2正3反); 硬币1概率:0.08192,硬币2概率:0.00567-->(1正4反); 硬币1概率:0.00512,硬币2概率:0.03087-->(3正2反);硬币1概率:0.02048,硬币2概率:0.01323-->(2正3反);

每个取硬币1或2出现最大的最大的概率,则此时

我们使用所有的z值计算,根据上述数据,可算出z值对应的

的期望。当
时,硬币1的期望
,同理
。则此时数据如下:
  • :0.14,
    -->(3正2反);
    :0.61,
    -->(2正3反);
    :0.94,
    -->(1正4反);
    :0.14,
    -->(3正2反);
    :0.61,
    -->(3正2反)。

计算在硬币1 条件下正方面分布,如:

正面概率3*0.14 = 0.42, 反面概率2*0.14 = 0.28,Z分布数据如下:
0.42, 0.28;
1.22, 1.83;
0.94, 3.76;
0.42, 0.28;
1.22,1.93。则可以计算出
,正面/(正面+反面)。

此时算出的值,更接近真实值0.4。

二. 算法过程

2.1 Jensen不等式

当函数满足凸函数(存在局部极小值),则有

是求期望。可从如下图理解和记忆。

2.2 算法推导

有观测变量数据Y(上例中正反面结果),隐藏变量Z(上例中硬币1硬币2),求分布

值。已知结果,和分布模型,求分布参数,使用似然估计算法:
取对数,设
为隐变量Z的分布。
(公式1)。

运用Jensen不等式(上图画的),

公式1有:

(公式2)

其中当满足

(公式3),C为常数,取等号。对公式3做如下变换:
两边对z取积分
,可推出

则有

(公式4),因为此时的
为估计出来的值,这里记为
。把
带入公式2中,则最后极大似然估计就如下:
,由于第二项为常数,所以最终我们的目标函数为:
(公式5), 其中
为参数, 这就是EM算法的E部。

接下来求

的极大值,得出
也就是
,即
。在把
带入到Q函数中,求极大值又可以得到
,最后直到收敛。

2.3 EM算法收敛性

要证明算法收敛,其实是证明

取对数
(公式6)

(公式7)设:
(公式8)

,则同时取
,并相减:
(公式9)。很明显公式9前个大括号大于0,那边就只要计算后一个大括号的值:
得证。

三. 高斯混合模型

离散随机变量期望:

连续随机变量的期望:

方差定义:

,期望的表示方式为:

协方差定义:

表示两个变量空间。用期望的表示方式为:
,两个变量独立协方差为0。 协方差矩阵:
多维高斯密度公式:
表示纬度维
的向量,
各纬度向量的平均值,
所有向量
协方差矩阵。

如下图所示,有观测样本数据

,属于3个正态分布(参数未知),哪些样本属于哪个正态分布未知。从图示直观来看,样本
最佳概率密度曲线应该是三个正态分布曲线的组合
高斯密度示意图

从几何意义理解,高斯混合模型就是多个独立高斯分布按照权重叠加的模型,其分布模型公式记为:

(公式 1) ,
是混合模型高斯数量;
高斯模型的权重(k个高斯模型的分布),
是高斯分布密度,
。设样本数据
,则完整数据就为
,则z是满足
的分布,那么此时

根据EM算法,z的分布是离散分布:

=
这里把
拆开进行换算得到:
=

则有:
,在这个后验分布中此时的
其实是
,是已知值。代入
,得:
最终求导可得:
,另外两个参数不再列举。

四. python例子

还是代码简单,高斯混合模型的预测,详情看示范例子:

https://github.com/zx3305/tennis/blob/master/em/main.py​github.com

参考资料:

机器学习之最大期望(EM)算法_谓之小一-CSDN博客_最大期望算法

https://blog.csdn.net/lin_limin/article/details/81048411

多维高斯分布 - jermmyhsu - 博客园

https://www.bilibili.com/video/BV13b411w7Xj

https://www.bilibili.com/video/BV1qW411k7ao?p=3

em算法详细例子及推导_EM算法详解(例子+推导)相关推荐

  1. DL之InceptionV4/ResNet:InceptionV4/Inception-ResNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之InceptionV4/ResNet:InceptionV4/Inception-ResNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 InceptionV4/Inc ...

  2. DL之RetinaNet:RetinaNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之RetinaNet:RetinaNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 RetinaNet算法的简介(论文介绍) 0.实验结果 1.RetinaNet算法的特 ...

  3. DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 Dilated Con ...

  4. DL之ShuffleNetV2:ShuffleNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之ShuffleNetV2:ShuffleNetV2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 ShuffleNetV2算法的简介(论文介绍) 1.论文特点 2.基于硬件 ...

  5. DL之ShuffleNet:ShuffleNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之ShuffleNet:ShuffleNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 相关文章 DL之ShuffleNet:ShuffleNet算法的简介(论文介绍).架构详 ...

  6. DL之MobileNetV2:MobileNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之MobileNet V2:MobileNet V2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 MobileNetV2算法的简介(论文介绍) MobileNet V2算法 ...

  7. DL之MobileNet:MobileNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之MobileNet:MobileNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 MobileNet算法的简介(论文介绍) 1.研究背景 2.传统的模型轻量化常用的方法 ...

  8. DL之SqueezeNet:SqueezeNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之SqueezeNet:SqueezeNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 SqueezeNet算法的简介(论文介绍) 1.轻量级的CNN架构优势 2.主要特 ...

  9. DL之DenseNet:DenseNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之DenseNet:DenseNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 DenseNet算法的简介(论文介绍) DenseNet算法的架构详解 3.DenseNe ...

  10. DL之ResNeXt:ResNeXt算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之ResNeXt:ResNeXt算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 ResNeXt算法的简介(论文介绍) ResNeXt算法的架构详解 ResNeXt算法的案例应 ...

最新文章

  1. Android APK反编译具体解释(附图)
  2. c#如何操作excel文件、Interior.ColorIndex 色彩列表
  3. leetcode算法题--学生分数的最小差值
  4. [Enterprise Library]Configuration类设计分析
  5. 下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用
  6. 【Python】机器学习绘图神器Matplotlib首秀!
  7. mysql fulltext索引
  8. Java异常详解及如何处理
  9. 作者:牟少敏,博士,山东农业大学教授。
  10. 用LDA在R中聚类四本小说
  11. matlab常用数学函数实验,实验二-MATLAB的数学运算基础.ppt
  12. 软件设计原则(五) 开闭原则
  13. magisk下载里显示没有模块_magisk框架
  14. shell脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
  15. BZOJ4622 [NOI 2003] 智破连环阵
  16. NLP会议介绍 2019
  17. C语言程序课程设计任务书
  18. 曾志伟原创港式奶茶店—喜乐街,台州金清人民路新店开业
  19. Android各个版本代号及其特性
  20. H.266/VVC相关技术学习笔记16:VTM6.0中的CIIP技术(帧内帧间联合预测)

热门文章

  1. AIX 上安装SSH
  2. Java接口的幂等性
  3. 谈谈读书自由与财富自由
  4. django2.2 连接redis集群
  5. 加载MNIST报错:[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法(亲测)
  6. 为VMware虚拟机中的Linux系统设置固定IP的方法
  7. php 如何快速判断一个数字属于什么范围
  8. loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
  9. Discuz代码研究-编码规范
  10. sublime text2 用ctags插件实现方法定位(转)