示例#1
0
        use_gpu = int(options.gpu)
    verbosity = int(options.verbose)

    N = int(1e5)  # n data points per component
    K = 2  # ndim
    ncomps = 3  # n mixture components
    npr.seed(datetime.now().microsecond)
    true_labels, data = generate_data(n=N, k=K, ncomps=ncomps)
    data = data - data.mean(0)
    data = data / data.std(0)

    #import pdb
    #pdb.set_trace()
    print "use_gpu=" + str(use_gpu)
    mcmc = DPNormalMixture(data,
                           ncomp=3,
                           gpu=use_gpu,
                           verbose=verbosity,
                           parallel=options.parallel)  #, mu0=mu0)
    mcmc.sample(200, nburn=0)
    print mcmc.mu[-1]

    bem = BEM_DPNormalMixture(mcmc, verbose=verbosity)
    bem.optimize(maxiter=5)
    print bem.mu

    ident_mcmc = DPNormalMixture(bem, verbose=verbosity)
    ident_mcmc.sample(100, nburn=0, ident=True)
    print ident_mcmc.weights[-1]
    print ident_mcmc.mu[-1]
示例#2
0
    def _fit(self, fcmdata, verbose=False):
        """
        fit the mixture model to the data
        use get_results() to get the fitted model
        """
        pnts = fcmdata.view().copy()
        self.m = pnts.mean(0)
        self.s = pnts.std(0)
        self.data = (pnts - self.m) / self.s

        if len(self.data.shape) == 1:
            self.data = self.data.reshape((self.data.shape[0], 1))

        if len(self.data.shape) != 2:
            raise ValueError("pnts is the wrong shape")
        self.n, self.d = self.data.shape

        if self._ref is not None:
            self.ident = True
            self._load_ref_at_fit(pnts)

        if self.prior_mu is not None:
            self._load_mu_at_fit()
        if self.prior_sigma is not None:
            self._load_sigma_at_fit()

        if self.seed is not None:
            seed(self.seed)
        else:
            from datetime import datetime
            seed(datetime.now().microsecond)

        #TODO move hyperparameter settings here
        if self.type.lower() == 'bem':
            self.cdp = BEM_DPNormalMixture(self.data,
                                           ncomp=self.nclusts,
                                           gamma0=self.gamma0,
                                           m0=self.m0,
                                           nu0=self.nu0,
                                           Phi0=self.Phi0,
                                           e0=self.e0,
                                           f0=self.f0,
                                           mu0=self._prior_mu,
                                           Sigma0=self._prior_sigma,
                                           weights0=self._prior_pi,
                                           alpha0=self.alpha0,
                                           gpu=self.device,
                                           parallel=self.parallel,
                                           verbose=verbose)
            self.cdp.optimize(self.niter)
        else:
            self.cdp = DPNormalMixture(self.data,
                                       ncomp=self.nclusts,
                                       gamma0=self.gamma0,
                                       m0=self.m0,
                                       nu0=self.nu0,
                                       Phi0=self.Phi0,
                                       e0=self.e0,
                                       f0=self.f0,
                                       mu0=self._prior_mu,
                                       Sigma0=self._prior_sigma,
                                       weights0=self._prior_pi,
                                       alpha0=self.alpha0,
                                       gpu=self.device,
                                       parallel=self.parallel,
                                       verbose=verbose)
            self.cdp.sample(niter=self.niter,
                            nburn=self.burnin,
                            thin=1,
                            ident=self.ident)

        if self.last is None:
            self.last = self.niter

        self._run = True  #we've fit the mixture model

        return self.get_results()