Esempio n. 1
0
 def set_vb_param(self, phi_):
     #unflatten and softmax
     self.phi_ = phi_.reshape(self.N, self.K)
     self.phi, logphi, self.H = softmax_weave(self.phi_)
     self.phi_hat = self.phi.sum(0)
     self.Hgrad = -logphi
     if self.prior_Z == 'DP':
         self.phi_tilde_plus_hat = self.phi_hat[::-1].cumsum()[::-1]
         self.phi_tilde = self.phi_tilde_plus_hat - self.phi_hat
     self.do_computations()
Esempio n. 2
0
 def set_vb_param(self,phi_):
     #unflatten and softmax
     self.phi_ = phi_.reshape(self.N,self.K)
     self.phi, logphi, self.H = softmax_weave(self.phi_)
     self.phi_hat = self.phi.sum(0)
     self.Hgrad = -logphi
     if self.prior_Z=='DP':
         self.phi_tilde_plus_hat = self.phi_hat[::-1].cumsum()[::-1]
         self.phi_tilde = self.phi_tilde_plus_hat - self.phi_hat
     self.do_computations()
Esempio n. 3
0
 def set_vb_param(self,phi_):
     """
     Accept a vector representing the variatinoal parameters, and reshape it into self.phi
     """
     self.phi_ = phi_.reshape(self.N,self.K)
     self.phi, logphi, self.H = softmax_weave(self.phi_)
     self.phi_hat = self.phi.sum(0)
     self.Hgrad = -logphi
     if self.prior_Z=='DP':
         self.phi_tilde_plus_hat = self.phi_hat[::-1].cumsum()[::-1]
         self.phi_tilde = self.phi_tilde_plus_hat - self.phi_hat
     self.do_computations()
Esempio n. 4
0
    def set_vb_param(self,phi_):
        """
        Accept a vector representing the variatinoal parameters, and reshape it into self.phi
        """
        self.phi_ = phi_.reshape(self.N, self.K)
        self.phi, logphi, self.H = softmax_weave(self.phi_)
        self.phi_hat = self.phi.sum(0)
        self.Hgrad = -logphi
        if self.prior_Z == 'DP':
            self.phi_tilde_plus_hat = self.phi_hat[::-1].cumsum()[::-1]
            self.phi_tilde = self.phi_tilde_plus_hat - self.phi_hat

        self.do_computations()
Esempio n. 5
0
    def __init__(self, N, K, prior_Z='symmetric', alpha=1.0, name='col_mix'):
        """
        Arguments
        =========
        N: the number of data
        K: the (initial) number of cluster (or truncation)
        prior_Z  - either 'symmetric' or 'DP', specifies whether to use a symmetric Dirichlet prior for the clusters, or a (truncated) Dirichlet Process.
        alpha: parameter of the Dirichelt (process)

        """
        CollapsedVB.__init__(self, name)
        self.N, self.K = N, K
        assert prior_Z in ['symmetric','DP']
        self.prior_Z = prior_Z
        self.alpha = alpha

        #random initial conditions for the vb parameters
        self.phi_ = np.random.randn(self.N, self.K)
        self.phi, logphi, self.H = softmax_weave(self.phi_)
        self.phi_hat = self.phi.sum(0)
        self.Hgrad = -logphi
        if self.prior_Z == 'DP':
            self.phi_tilde_plus_hat = self.phi_hat[::-1].cumsum()[::-1]
            self.phi_tilde = self.phi_tilde_plus_hat - self.phi_hat