Пример #1
0
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
Пример #2
0
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
Пример #3
0
    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)
Пример #4
0
 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)
Пример #5
0
 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)