def cluster(data, k, mode = 'full'): d = data.shape[1] gm = GM(d, k, mode) gmm = GMM(gm, 'random') em = RegularizedEM(pcnt = pcnt, pval = pval) em.train(data, gmm, maxiter = 20) return gm, gmm.bic(data)
def _generate_data(nframes, d, k, mode = 'diag'): N.random.seed(0) w, mu, va = GM.gen_param(d, k, mode, spread = 1.5) gm = GM.fromvalues(w, mu, va) # Sample nframes frames from the model data = gm.sample(nframes) #++++++++++++++++++++++++++++++++++++++++++ # Approximate the models with classical EM #++++++++++++++++++++++++++++++++++++++++++ emiter = 5 # Init the model lgm = GM(d, k, mode) gmm = GMM(lgm, 'kmean') gmm.init(data) gm0 = copy.copy(gmm.gm) # The actual EM, with likelihood computation like = N.zeros(emiter) for i in range(emiter): g, tgd = gmm.sufficient_statistics(data) like[i] = N.sum(N.log(N.sum(tgd, 1)), axis = 0) gmm.update_em(data, g) return data, gm