class _WeakLimitHDPHMMTransitionsBase(_HMMTransitionsBase): def __init__(self, gamma, alpha, num_states=None, beta=None, trans_matrix=None): if num_states is None: assert beta is not None or trans_matrix is not None self.N = len(beta) if beta is not None else trans_matrix.shape[0] else: self.N = num_states self.alpha = alpha self.beta_obj = Multinomial(alpha_0=gamma, K=self.N, weights=beta) super(_WeakLimitHDPHMMTransitionsBase, self).__init__( num_states=self.N, alpha=alpha, alphav=alpha * self.beta, trans_matrix=trans_matrix, ) @property def beta(self): return self.beta_obj.weights @beta.setter def beta(self, weights): self.beta_obj.weights = weights self.alphav = self.alpha * self.beta @property def gamma(self): return self.beta_obj.alpha_0 @gamma.setter def gamma(self, val): self.beta_obj.alpha_0 = val @property def alpha(self): return self._alpha @alpha.setter def alpha(self, val): self._alpha = val def copy_sample(self): new = super(_WeakLimitHDPHMMTransitionsBase, self).copy_sample() new.beta_obj = self.beta_obj.copy_sample() return new
class _WeakLimitHDPHMMTransitionsBase(_HMMTransitionsBase): def __init__(self,gamma,alpha,num_states=None,beta=None,trans_matrix=None): if num_states is None: assert beta is not None or trans_matrix is not None self.N = len(beta) if beta is not None else trans_matrix.shape[0] else: self.N = num_states self.alpha = alpha self.beta_obj = Multinomial(alpha_0=gamma,K=self.N,weights=beta) super(_WeakLimitHDPHMMTransitionsBase,self).__init__( num_states=self.N,alpha=alpha, alphav=alpha*self.beta,trans_matrix=trans_matrix) @property def beta(self): return self.beta_obj.weights @beta.setter def beta(self,weights): self.beta_obj.weights = weights self.alphav = self.alpha * self.beta @property def gamma(self): return self.beta_obj.alpha_0 @gamma.setter def gamma(self,val): self.beta_obj.alpha_0 = val @property def alpha(self): return self._alpha @alpha.setter def alpha(self,val): self._alpha = val def copy_sample(self): new = super(_WeakLimitHDPHMMTransitionsBase,self).copy_sample() new.beta_obj = self.beta_obj.copy_sample() return new