因为要用到GMM的EM算法,所以自己写了一个(本人很菜,这一点代码写了两天)。写完发现sklearn的包里有(心情复杂)。。那不如检测一下自己写的对不对吧。嘿嘿。做了下实现,用同一组参数初始化,看下来是没问题的。
关于GMM 的理论,有两篇博客写的很好,放下链接:
高斯混合模型(GMM)及其EM算法的理解
详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
import numpy as np
from numpy import linalg
import math
from sklearn.mixture import GaussianMixture
class GMM(object):
def __init__(self, X, K):
self.N, self.D = X.shape
self.K = K
self.Mu, self.Sigma, self.Pi, self.Gamma = self.init_params()
def init_params(self):
Mu = np.random.rand(self.K, self.D) # K*D
Sigma = np.array([np.eye(self.D)