def setParamsFromCountVec(self, K, N=None): """ Set params to reasonable values given counts for each comp. Parameters -------- K : int number of components N : 1D array, size K. optional, default=[1 1 1 1 ... 1] size of each component Post Condition for VB --------- Attributes rho/omega are set so q(beta) equals its posterior given count vector N. """ self.ClearCache() self.K = int(K) if N is None: N = 1.0 * np.ones(K) assert N.ndim == 1 assert N.size == K eta1 = 1 + N eta0 = self.gamma + convertToN0(N) self.rho = eta1 / (eta1 + eta0) self.omega = eta1 + eta0
def calc_Lalloc_from_count_vec(N_K=None, gamma1=1.0, gamma0=1.0): ''' Compute allocation-model ELBO term for DP mixture Args ---- N_K : 1D array, size K gamma1 : positive scalar gamma0 : positive scalar Returns ------- Lalloc : scalar ''' N_K = np.asarray(N_K, dtype=np.float64) K = N_K.size eta1 = N_K + gamma1 eta0 = convertToN0(N_K) + gamma0 return K * c_Beta(gamma1, gamma0) - c_Beta(eta1, eta0)