高斯混合模型(GMM)的EM算法求解 python实现

import numpy as np
from scipy.stats import norm

def gmm_em(X ,K=2, max_iter=100, epsilon=1e-4, T = 5):
    N = len(X)
    print('-----EM optimization for GMM-----')
    # EM算法只能保证收敛到稳定点,不能保证收敛至极大值点
    # 常用的办法是进行几次迭代,对结果做比较,并选择最好
    Mu = []
    Sigma = []
    for t in range(T):
        # 初始化
        alpha = np.ones([K, 1]) /K # 权重
        mu = np.ones([K, 1]) # 均值
        sigma = np.ones([K, 1]) # 标准差
        for k in range(K):
            n = np.random.randint(K*3, K*30)
            x = np.random.choice(X, n)
            mu[k][0] = np.mean(x)
            sigma[k][0] = np.std(x, ddof = 1)
        alpha_, mu_, sigma_ = alpha, mu, sigma

        for _iter in range(max_iter):
            # expectation 隐变量估计
            gamma =  np.zeros([K, N])
            for k in range(K):
                gamma[k] = alpha[k] * norm.pdf(X, loc=mu[k][0], scale=sigma[k][0])
            
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值