基于Bayesian的自动GMM组件数确定算法

326 篇文章 2 订阅
183 篇文章 6 订阅

基于EM的GMM实现

http://www.mathworks.com/matlabcentral/fileexchange/26184-em-algorithm-for-gaussian-mixture-model


推荐的实现:

Variational Bayesian Inference for Gaussian Mixture Model 

作用:

can auto determine the number of components

来源:http://www.mathworks.com/matlabcentral/fileexchange/35362-variational-bayesian-inference-for-gaussian-mixture-model?controller=file_infos&download=true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EM算法是一种重要的统计学习算法,它广泛应用于概率模型的学习和参估计,其中基于Bayesian更新的EM算法被认为是EM算法的进一步发展和改进。基本思想是,在每次迭代中,使用先前学习到的生成模型来更新参,然后使用贝叶斯公式计算后验分布,并使用该后验分布来控制模型参的更新,使模型收敛到局部最优解。 以下是基于Bayesian更新的EM算法的代码: 1.初始化模型参 def initialize_parameters(): # initialize mean mu = np.random.rand(k,d) # initialize covariance matrix cov = np.zeros((k,d,d)) for i in range(k): cov[i] = np.eye(d) # initialize mixture coefficients pi = np.ones(k)/k return mu, cov, pi 2. E步,根据当前参计算每个样本属于混合高斯分布的后验概率 def E_step(X, mu, cov, pi): # calculate the probability density function for all samples g = np.zeros((len(X),k)) for c in range(k): g[:,c] = multivariate_normal.pdf(X,mean=mu[c],cov=cov[c],allow_singular=True) # calculate the posterior probability for all samples posterior_prob = np.zeros((len(X),k)) for c in range(k): posterior_prob[:,c] = pi[c]*g[:,c] posterior_prob = posterior_prob / posterior_prob.sum(axis=1,keepdims=True) return posterior_prob 3. M步,根据已知后验概率计算新的模型参 def M_step(X, posterior_prob): # update mixture coefficients pi = posterior_prob.sum(axis=0) / len(X) # update mean mu = np.zeros((k,d)) for c in range(k): for i in range(len(X)): mu[c] += posterior_prob[i,c]*X[i] mu[c] /= posterior_prob[:,c].sum() # update covariance matrix cov = np.zeros((k,d,d)) for c in range(k): for i in range(len(X)): xt = (X[i]-mu[c]).reshape((d,1)) cov[c] += posterior_prob[i,c]*np.dot(xt,xt.T) cov[c] /= posterior_prob[:,c].sum() return mu, cov, pi 4.执行EM算法 def EM(X, k, max_iter): # initialize parameters mu, cov, pi = initialize_parameters() # run EM algorithm for i in range(max_iter): # E-step posterior_prob = E_step(X, mu, cov, pi) # M-step mu, cov, pi = M_step(X, posterior_prob) # calculate log-likelihood ll = np.sum(np.log(np.sum(posterior_prob, axis=1))) print('Iteration {}: log-likelihood = {}'.format(i+1, ll)) return mu, cov, pi 在这个代码中,首先是初始化模型参,包括means、covariance matrices和mixing coefficients。然后,在E步骤中,计算每个样本属于每个高斯分布的后验概率。接着,在M步骤中,使用似然函最大化法更新模型参,即使用先前计算的后验概率来计算新的means、covariance matrices和mixing coefficients。最后,在每个迭代中,计算并打印对似然函值。最终,该函返回最优的模型参,即means、covariance matrices和mixing coefficients。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值