예제 #1
0
  def set_global_params(self, hmodel=None, 
                                U1=None, U0=None, 
                                K=0, beta=None, topic_prior=None,
                                Ebeta=None, EbetaLeftover=None, theta=None, **kwargs):
        if hmodel is not None:
          self.K = hmodel.allocModel.K
          self.U1 = hmodel.allocModel.U1
          self.U0 = hmodel.allocModel.U0
          self.set_helper_params()
          return

        if U1 is not None and U0 is not None:
          self.U1 = U1
          self.U0 = U0
          self.K = U1.size
          self.set_helper_params()
          return

        if Ebeta is not None and EbetaLeftover is not None:
          Ebeta = np.squeeze(Ebeta)
          EbetaLeftover = np.squeeze(EbetaLeftover)
          beta = np.hstack( [Ebeta, EbetaLeftover])
          self.K = beta.size - 1
          
        elif beta is not None:
          assert beta.size == K
          beta = np.hstack([beta, np.min(beta)/100.])
          beta = beta/np.sum(beta)
          self.K = beta.size - 1
        else:
          raise ValueError('Bad parameters. Vector beta not specified.')

        # Now, use the specified value of beta to find the best U1, U0
        assert beta.size == self.K + 1
        assert abs(np.sum(beta) - 1.0) < 0.001
        vMean = OptimHDP.beta2v(beta)
        # for each k=1,2...K
        #  find the multiplier vMass[k] such that both are true
        #  1) vMass[k] * vMean[k] > 1.0
        #  2) vMass[k] * (1-vMean[k]) > self.alpha0
        vMass = np.maximum( 1./vMean , self.alpha0/(1.-vMean))
        self.U1 = vMass * vMean
        self.U0 = vMass * (1-vMean)
        assert np.all( self.U1 >= 1.0 - 0.00001)
        assert np.all( self.U0 >= self.alpha0 - 0.00001)
        assert self.U1.size == self.K
        assert self.U0.size == self.K

        ####################################### Set Global Params for Theta
        if theta is not None and beta is not None:
          self.theta = theta
        else:
          self.theta = np.ones( (self.nNodeTotal, self.K + 1 ) )

        self.set_helper_params()
예제 #2
0
  def insert_global_params(self, beta=None, **kwargs):
    Knew = beta.size
    beta = np.hstack([beta, np.min(beta)/100.])
    beta = beta/np.sum(beta)
    vMean = OptimHDP.beta2v(beta)
    vMass = np.maximum( 1./vMean , self.alpha0/(1.-vMean))

    self.K += Knew
    self.U1 = np.append(self.U1, vMass * vMean )
    self.U0 = np.append(self.U0, vMass * (1-vMean))

    assert self.U1.size == self.K
    assert self.U0.size == self.K
    self.set_helper_params()    
예제 #3
0
  def _convert_beta2u(self, beta):
    ''' Given a vector beta (size K+1),
          return educated guess for vectors u1, u0

        Returns
        --------
          U1 : 1D array, size K
          U0 : 1D array, size K
    '''
    assert abs(np.sum(beta) - 1.0) < 0.001
    vMean = OptimHDP.beta2v(beta)
    # for each k=1,2...K
    #  find the multiplier vMass[k] such that both are true
    #  1) vMass[k] * vMean[k] > 1.0
    #  2) vMass[k] * (1-vMean[k]) > self.alpha0
    vMass = np.maximum( 1./vMean , self.alpha0/(1.-vMean))
    U1 = vMass * vMean
    U0 = vMass * (1-vMean)
    return U1, U0    
예제 #4
0
    def set_global_params(self,
                          hmodel=None,
                          U1=None,
                          U0=None,
                          K=0,
                          beta=None,
                          topic_prior=None,
                          Ebeta=None,
                          EbetaLeftover=None,
                          theta=None,
                          **kwargs):
        if hmodel is not None:
            self.K = hmodel.allocModel.K
            self.U1 = hmodel.allocModel.U1
            self.U0 = hmodel.allocModel.U0
            self.set_helper_params()
            return

        if U1 is not None and U0 is not None:
            self.U1 = U1
            self.U0 = U0
            self.K = U1.size
            self.set_helper_params()
            return

        if Ebeta is not None and EbetaLeftover is not None:
            Ebeta = np.squeeze(Ebeta)
            EbetaLeftover = np.squeeze(EbetaLeftover)
            beta = np.hstack([Ebeta, EbetaLeftover])
            self.K = beta.size - 1

        elif beta is not None:
            assert beta.size == K
            beta = np.hstack([beta, np.min(beta) / 100.])
            beta = beta / np.sum(beta)
            self.K = beta.size - 1
        else:
            raise ValueError('Bad parameters. Vector beta not specified.')

        # Now, use the specified value of beta to find the best U1, U0
        assert beta.size == self.K + 1
        assert abs(np.sum(beta) - 1.0) < 0.001
        vMean = OptimHDP.beta2v(beta)
        # for each k=1,2...K
        #  find the multiplier vMass[k] such that both are true
        #  1) vMass[k] * vMean[k] > 1.0
        #  2) vMass[k] * (1-vMean[k]) > self.alpha0
        vMass = np.maximum(1. / vMean, self.alpha0 / (1. - vMean))
        self.U1 = vMass * vMean
        self.U0 = vMass * (1 - vMean)
        assert np.all(self.U1 >= 1.0 - 0.00001)
        assert np.all(self.U0 >= self.alpha0 - 0.00001)
        assert self.U1.size == self.K
        assert self.U0.size == self.K

        ####################################### Set Global Params for Theta
        if theta is not None and beta is not None:
            self.theta = theta
        else:
            self.theta = np.ones((self.nNodeTotal, self.K + 1))

        self.set_helper_params()