EM算法(Expectation Maximization Algorithm)

m~(u,sigma).u是均值,sigma是方差。

我们的方法是假设。首先假设一个模型参数θ,然后每个样本来自四川/东北的概率p(zi)就能算出来了,p(xi,zi)=p(xi|zi)p(zi),而x|z=0服从四川人分布,x|z=1服从东北人分布,所以似然函数可以写成含有θ的函数,极大化它我们可以得到一个新的θ。新的θ因为考虑了样本来自哪个分布,会比原来的更能反应数据规律。有了这个更好的θ我们再对每个样本重新计算它来自四川和东北的概率,用更好的θ算出来的概率会更准确,有了更准确的信息,我们可以继续像上面一样估计θ,自然而然这次得到的θ会比上一次更棒,如此蒸蒸日上,直到收敛(参数变动不明显了),理论上,EM算法就说完了

clip_image032表示该样例隐含变量z的某种分布

 

 

,,可以得到p的累加为c

上面两式相除得到下式子

http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html

以下是高斯模型的代码,推导可查看上面这个网址。

def my_EM(X):
    k = 2
    N = len(X)
    Miu = np.random.rand(k, 1)
    Posterior = mat(zeros((N, 2)))
    dominator = 0
    numerator = 0
    # 先求后验概率
    for iter in range(1000):
        #E[i]
        for i in range(N):
            dominator = 0

            for j in range(k):
                dominator = dominator + np.exp(-1.0 / (2.0 * SIGMA ** 2) * (X[i] - Miu[j]) ** 2)
            # print dominator,-1/(2*SIGMA**2) * (X[i] - Miu[j])**2,2*SIGMA**2,(X[i] - Miu[j])**2
            # return
            for j in range(k):
                numerator = np.exp(-1.0 / (2.0 * SIGMA ** 2) * (X[i] - Miu[j]) ** 2)
                Posterior[i, j] = numerator / dominator
        oldMiu = copy.deepcopy(Miu)
        # 最大化即M步
        for j in range(k):
            numerator = 0
            dominator = 0
            for i in range(N):
                numerator = numerator + Posterior[i, j] * X[i]
                dominator = dominator + Posterior[i, j]
            Miu[j] = numerator / dominator
        print((abs(Miu - oldMiu)).sum())
        # print '\n'
        if (abs(Miu - oldMiu)).sum() < EPS:
            print (Miu, iter)
            break

https://blog.csdn.net/u010866505/article/details/77877345

 

高斯混合模型(GMM)

什么是隐变量呢?就是观测不到的变量,对每一个身高而言,它来自四川还是东北,或者来自女生还是男生,就是一个隐变量。

 

其他参考代码:

https://github.com/YunnanShuke/ycimpute/blob/master/ycimpute/unsupervised/expectation_maximization.py

 

即update_X即,每次更新了 参数 mu跟 sigma, theta 越来越小,即越来越接近真实(即update_x越来越贴近)

实例:

图中的0.45是怎么得来的呢?由两个硬币的初始值0.6和0.5,容易得出投掷出5正5反的概率是pA=C(10,5)*(0.6^5)*(0.4^5),pB=C(10,5)*(0.5^5)*(0.5^5),  pA/(pA+pB)=0.449,  0.45就是0.449近似而来的,表示第一组实验选择的硬币是A的概率为0.45。图中的2.2H,2.2T是怎么得来的呢?  0.449 * 5H = 2.2H ,0.449 * 5T = 2.2T ,表示第一组实验选择A硬币且正面朝上次数的期望值是2.2。其他的值依次类推。

https://blog.csdn.net/u011300443/article/details/46763743

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值