class _ConcentrationResamplingMixin(object): # NOTE: because all rows share the same concentration parameter, we can't # use CategoricalAndConcentration; gotta use GammaCompoundDirichlet directly def __init__(self,num_states,alpha_a_0,alpha_b_0,**kwargs): self.alpha_obj = GammaCompoundDirichlet(num_states,alpha_a_0,alpha_b_0) super(_ConcentrationResamplingMixin,self).__init__( num_states=num_states,alpha=self.alpha,**kwargs) @property def alpha(self): return self.alpha_obj.concentration @alpha.setter def alpha(self,alpha): if alpha is not None: self.alpha_obj.concentration = alpha # a no-op when called internally for d in self._row_distns: d.alpha_0 = alpha def resample(self,stateseqs=[],trans_counts=None): trans_counts = self._count_transitions(stateseqs) if trans_counts is None \ else trans_counts self._resample_alpha(trans_counts) return super(_ConcentrationResamplingMixin,self).resample( stateseqs=stateseqs,trans_counts=trans_counts) def _resample_alpha(self,trans_counts): self.alpha_obj.resample(trans_counts) self.alpha = self.alpha_obj.concentration def meanfieldupdate(self,*args,**kwargs): raise NotImplementedError # TODO
def __init__(self, num_states, gamma_a_0, gamma_b_0, alpha_a_0, alpha_b_0, beta=None, trans_matrix=None, **kwargs): 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.beta_obj = MultinomialAndConcentration(a_0=gamma_a_0, b_0=gamma_b_0, K=self.N, weights=beta) self.alpha_obj = GammaCompoundDirichlet(self.N, alpha_a_0, alpha_b_0) # NOTE: we don't want to call WeakLimitHDPHMMTransitions.__init__ # because it sets beta_obj in a different way _HMMTransitionsBase.__init__(self, num_states=self.N, alphav=self.alpha * self.beta, trans_matrix=trans_matrix, **kwargs)
def __init__(self,num_states,alpha_a_0,alpha_b_0,**kwargs): self.alpha_obj = GammaCompoundDirichlet(num_states,alpha_a_0,alpha_b_0) super(_ConcentrationResamplingMixin,self).__init__( num_states=num_states,alpha=self.alpha,**kwargs)