赞
踩
m~(u,sigma).u是均值,sigma是方差。
我们的方法是假设。首先假设一个模型参数θ,然后每个样本来自四川/东北的概率p(zi)就能算出来了,p(xi,zi)=p(xi|zi)p(zi),而x|z=0服从四川人分布,x|z=1服从东北人分布,所以似然函数可以写成含有θ的函数,极大化它我们可以得到一个新的θ。新的θ因为考虑了样本来自哪个分布,会比原来的更能反应数据规律。有了这个更好的θ我们再对每个样本重新计算它来自四川和东北的概率,用更好的θ算出来的概率会更准确,有了更准确的信息,我们可以继续像上面一样估计θ,自然而然这次得到的θ会比上一次更棒,如此蒸蒸日上,直到收敛(参数变动不明显了),理论上,EM算法就说完了
,,可以得到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)
什么是隐变量呢?就是观测不到的变量,对每一个身高而言,它来自四川还是东北,或者来自女生还是男生,就是一个隐变量。
。
其他参考代码:
即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。其他的值依次类推。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。