예제 #1
0
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
예제 #2
0
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