zoukankan      html  css  js  c++  java
  • EM算法直观认识

    Expectation Maximization, 字面翻译为, "最大期望".

    我个人其实一直都不太理解EM算法, 从我个人的渊源来看, 之前数理统计里面的参数估计, 也是没有太理解. 但困难总是要面对, 必须啃下它, 因其真的不太直观, 所以先举个经典的栗子.

    栗子-硬币正面概率

    理想我是上帝

    假设咱有两个硬币, 分别为 coin A 和 coin B

    同样假设我们上帝, 知道做实验是用的哪个硬币 的情况下, 扔的结果如下: (H 表正面, T表反面)

    • B: H T T T H H T H T H
    • A: H H H H T H H H H H
    • A: H T H H H H H T H H
    • B: H T H T T T H H T T
    • A: T H H H T H H H T H

    用 Maximum likelihood (极大似然), 这里就是用样本去估计总体呀, 对应结果如下:

    知道是哪个币 coin A coin B
    B 5正, 5反
    A 9正, 1反
    A 8正, 2反
    B 4正, 6反
    A 7正, 3反

    站在上帝视角, 已经知道每次实验是使用谁(硬币A, B), 因此很容易统计得到:

    (hat heta_A = frac {9+8+7}{24 + 6} = frac {24}{30} = 0.8)

    同样易知:

    $hat heta_B = frac {5 + 4 }{9+11} = frac {9}{20} =0.45 $

    此刻就可以发现, coin A 有问题, 正面朝上的概率竟达到 0.8, 这不可能.

    现实我是凡人

    还是刚刚那个扔硬币的结果, 没有上帝视角,不知道是用的哪个硬币

    • ? : H T T T H H T H T H
    • ? : H H H H T H H H H H
    • ? : H T H H H H H T H H
    • ? : H T H T T T H H T T
    • ? : T H H H T H H H T H

    这时候要计算 硬币 A, B 的正面朝上的概率, 即引出了 EM算法.

    假设1: 不同硬币,对于每一个结果是 H 或 T 也是有一个概率, so, 先假设 A, B 正面朝上概率:

    (hat heta_A^{(0)} = 0.6)

    (hat heta^{(0)}_B = 0.5)

    假设2: 对于每次试验的结果, 是来自不同硬币也有一个概率, (和要为1的哦) (Q_i(z = A) = 0.6, Q_i(z = B) = 0.4)

    于是就可得到试验结果 (E-step):

    • (0.45A, 0.55B) : H T T T H H T H T H
    • (0.80A, 0.20B) : H H H H T H H H H H
    • (0.73A, 0.27B) : H T H H H H H T H H
    • (0.35B, 0.65B) : H T H T T T H H T T
    • (0.65A, 0.35B) : T H H H T H H H T H
    预估是A,B的概率下 coin A coin B
    5正5反 => A: (5 * 0.45, 5 * 0.45); B: (5 * 0.55, 5 * 0.55) 2.2正; 2.2反 2.8正; 2.8反
    9正1反 => A: (9 * 0.80, 1 * 0.80); B: (9 * 0.20, 1 * 0.20) 7.2正; 0.8反 1.8正, 0.2反
    8正2反 => A: (8 * 0.73, 2 * 0.73); B: (8 * 0.27, 2 * 0.27) 5.9正; 1.5反 2.1正; 0.5反
    4正6反 => A: (4 * 0.35, 6 * 0.35); B: (4 * 0.65, 6 * 0.65) 1.4正; 2.1反 2.6正; 3.9反
    7正3反 => A: (7 * 0.65, 3 * 0.65); B: (7 * 0.35, 3 * 0.35) 4.5正; 1.9反 2.5正; 1.1反
    合计 21.3正; 8.6反 11.7正; 8.4反

    此时, 则是相当于更新了一次估计值:

    (hat heta_A ^{(1)}= frac {21.3}{21.3 + 8.6} = 0.71)

    同理,

    (hat heta_B ^{(1)}= frac {11.7}{11.7 + 8.4} = 0.58)

    这样, 其实又影响了 E-step:

    • (0.45A, 0.55B) -> maybe (0.48A, 0.52B)
    • (0.80A, 0.20B) -> maybe (0.71A, 0.29B)
    • (0.73A, 0.27B) -> maybe (0.68A, 0.32B)
    • (0.35B, 0.65B) -> maybe (0.42A, 0.58B)
    • (0.65A, 0.35B) -> maybe (0.73A, 0.27B)

    这样, 其实也影响了每次的结果, 从而又更新了估计参数, 然后就一直循环, 直到收敛退出.....,

    假设是第20次, 收敛啦, 得到A, B 正面朝上 的最终预测概率:

    (hat heta_B ^{(20)}= 0.82)

    (hat heta_B ^{(20)}= 048)

    为啥一定收敛, 本文后面会证明一波的, 老铁们, 先稳住

    发现: 这样得到的结果, 跟上帝视角, 是差不多的, EM近似模拟出了真实参数, 一个字, 稳!

    其实也发现了, EM所完成的核心任务, 就是跟咱大一的统计学里面学的, 根据样本分布, 来估计总体的分布参数.用处其实还是很大的, 在市场研究领域, 比如估计两种产品的分布...

    EM 核心步骤

    • E-step: Compute a distribution on the labels of the points, using current parameters.

    • M-step: Update parameters using current guess of label distribution.

    其实都不用翻译, 字面意思, 一看就懂了,对吧, 结合前面扔硬币的栗子. 好吧...嗯, 还是再举个统计的栗子吧.

    case1-高斯分布参数

    假设有一堆观测点, 假设已经知道, 有A, B两个类别, 分别为不同的高斯分布 , 对应每个点, 属于分别两个不同的高斯分布的概率是怎样的?

    E-step: 确定(初始化) 每个点, 分别属于 A, B 这两个高斯分布的概率分别是多少 (一 一对应的哦)

    M-step: 在 E-step 已经算出每个点的属于哪个分布的概率下, 更新一次估计参数的值.

    这样其实, 参数值的改变, 也同时影响了 E-step .....

    参考上面扔硬币的栗子

    反复这样的 E->M->E->M... 直到收敛

    case2-类梯度上升的方式

    上升, 下降都一样哈, 只是求解有些像而已, 不影响.

    回归在大二学的数理统计时, 在知道样本观测数据的前提下, 要求总体的参数分布 参数估计, 通常的方法就是极大似然法.

    贝斯理论 vs 古典概率派: 贝派认为, 总体的参数,不是一个固定值, 是满足某种概率模型分布的随机变量.

    通常是, 构造一个似然函数, 假设是 (L( heta) = log P(x: heta)) , 当然, 似然函数不一定是凸函数

    凸函数(convex): 最大的优点是, 有一个全局最优解

    log: 是在求解的时候, 方便乘法变加法, 不想再解释了, 再重复我自己都要吐了

    假设呢, 则不同的状态 t 下, 估计出来的参数分别为:

    ( heta ^{(t)}, heta ^{(t+1)}, heta ^{(t+2)}, heta ^{(t+3)}, heta ^{(t+n)} ...)

    对于每个状态呢, 同时构造一个convex 函数, 假设是 (g( heta)), 希望在 (L( heta) 在 heta ^{(t)}) 这个点的 极小值 和 (g( heta)) 在这个点的极大值是 重合的. 在这个前提下, 可以求关于 (g( heta)) 的最优化.

    .... 重复这个过程即可, 最后收敛, 跟梯度上升其实差不多的思想.

    如上就是EM算法的直观认识了, 下篇就正式推导一波~

  • 相关阅读:
    Spring异常重试框架Spring Retry
    Ubuntu 16.04无法在WPS中输入中文的问题解决
    Ubuntu 16.04使用百度云的方案
    Ubuntu 16.04安装Wine版的迅雷+QQ(完美方案,终极解决方法)
    Ubuntu下Deb软件包相关安装与卸载
    Spring在Java Filter注入Bean为Null的问题解决
    MyBatis 3在Insert之后返回主键
    MySQL JDBC URL参数(转)
    MySQL索引原理及慢查询优化
    Markdown 语法整理大集合2017
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/12056661.html
Copyright © 2011-2022 走看看