def setUp(self): self.options = beta.get_default_options() self.options.max_iter = 200 self.options.min_iter = 4 self.K = 3 # the exponential family we are dealing with self.exp_family = beta.DirichletExpFamily(k=2) np.random.seed(1) self.setUpData() #self.weights = np.ones(len(self.T)) #self.weights[0] = .2 self.weights = np.random.rand(len(self.T))
np.random.seed(1) N = 40 x = np.empty(N) "Data." x[:N/2] = np.random.beta(3, 1, N/2) x[N/2:] = np.random.beta(1, 3, N/2) T = np.empty((N, 2)) "Sufficient statistics of data." T[:,0] = np.log(x) T[:,1] = np.log(1-x) weights = np.ones(N) options = beta.get_default_options() options.K = 2 options.point_estimates = True options.max_iter = 25 family = beta.DirichletExpFamily(k=2) exp_family = beta.DirichletExpFamily(k=2) mixture = beta.ExpFamilyMixture(T, weights, options.K, exp_family, -np.ones(2), 1., options=options) eta_0 = np.array([ 0.17656734, 0.16734223]) epsilon = 1e-1 * np.ones(2) mixture.q_eta.eta[0] = eta_0 + epsilon mixture.q_eta.eta[1] = eta_0 - epsilon for _i in xrange(options.max_iter): mixture.update()