def test_entropyWish(self):
   ''' Verify that (wishart) entropy is same for this object and Wishart object 
   '''
   Hself = self.distr.entropyWish()
   wishDistr = WishartDistr(v=self.distr.dF, invW=self.distr.invW)
   Hwish = wishDistr.get_entropy()
   assert np.allclose( Hself, Hwish)
Exemple #2
0
 def test_entropyWish(self):
     ''' Verify that (wishart) entropy is same for this object and Wishart object 
 '''
     Hself = self.distr.entropyWish()
     wishDistr = WishartDistr(v=self.distr.dF, invW=self.distr.invW)
     Hwish = wishDistr.get_entropy()
     assert np.allclose(Hself, Hwish)
Exemple #3
0
 def test_post_update_soVB(self, rho=0.375):
     distrA = copy.deepcopy(self.distr)
     distrB = WishartDistr(distrA.v, invW=np.eye(distrA.D))
     self.distr.post_update_soVB(rho, distrB)
     assert self.distr.v == rho * distrA.v + (1 - rho) * distrB.v
     assert np.allclose(self.distr.invW,
                        rho * distrA.invW + (1 - rho) * distrB.invW)
class TestWishart(object):
  def setUp(self):
    self.v = 4
    self.invW = np.eye(2)
    self.distr = WishartDistr(v=self.v, invW=self.invW)
    
  def test_dimension(self):
    assert self.distr.D == self.invW.shape[0]
    
  def test_cholinvW(self):
    cholinvW = self.distr.cholinvW()
    assert np.allclose(np.dot(cholinvW, cholinvW.T), self.distr.invW)
  
  def test_expected_covariance_matrix(self):
    CovMat = self.distr.ECovMat()
    MyCovMat = self.invW / (self.v - self.distr.D - 1)
    print MyCovMat, CovMat
    assert np.allclose(MyCovMat, CovMat)
    
  def test_post_update_soVB(self, rho=0.375):
    distrA = copy.deepcopy(self.distr)
    distrB = WishartDistr(distrA.v, invW=np.eye(distrA.D) )        
    self.distr.post_update_soVB(rho, distrB)
    assert self.distr.v == rho*distrA.v + (1-rho)*distrB.v
    assert np.allclose(self.distr.invW, rho*distrA.invW + (1-rho)*distrB.invW)
    
  def test_entropy_posterior_gets_smaller(self, N=1):
    PRNG = np.random.RandomState(seed=8675309)
    for trial in range(3):
      X = PRNG.randn(N, self.distr.D)
      xxT = np.dot(X.T, X)

      SS = SuffStatBag(K=1, D=self.distr.D)
      SS.setField('N', [N], dims='K')
      SS.setField('xxT', [xxT], dims=('K','D','D'))

      postD = self.distr.get_post_distr(SS, 0)
      assert postD.D == self.distr.D
      Hpost = postD.get_entropy()
      Hprior = self.distr.get_entropy()
      print 'Prior %.3g, Post %.3g' % (Hprior, Hpost)
      print self.distr.invW
      print postD.invW
      assert Hpost < Hprior
Exemple #5
0
 def CreateWithPrior(cls, inferType, priorArgDict, Data):
     D = Data.dim
     if inferType == 'EM':
         obsPrior = None
         return cls(inferType,
                    D,
                    obsPrior,
                    min_covar=priorArgDict['min_covar'])
     else:
         obsPrior = WishartDistr.CreateAsPrior(priorArgDict, Data)
         return cls(inferType, D, obsPrior)
Exemple #6
0
 def CreateWithAllComps(cls, oDict, obsPrior, compDictList):
     if 'min_covar' in oDict:
         mc = oDict['min_covar']
         self = cls(oDict['inferType'], obsPrior=obsPrior, min_covar=mc)
     else:
         self = cls(oDict['inferType'], obsPrior=obsPrior)
     self.K = len(compDictList)
     self.comp = [None for k in range(self.K)]
     if self.inferType == 'EM':
         for k in xrange(self.K):
             self.comp[k] = ZMGaussDistr(**compDictList[k])
             self.D = self.comp[k].D
     elif self.inferType.count('VB') > 0:
         for k in xrange(self.K):
             self.comp[k] = WishartDistr(**compDictList[k])
             self.D = self.comp[k].D
     return self
Exemple #7
0
class TestWishart(object):
    def setUp(self):
        self.v = 4
        self.invW = np.eye(2)
        self.distr = WishartDistr(v=self.v, invW=self.invW)

    def test_dimension(self):
        assert self.distr.D == self.invW.shape[0]

    def test_cholinvW(self):
        cholinvW = self.distr.cholinvW()
        assert np.allclose(np.dot(cholinvW, cholinvW.T), self.distr.invW)

    def test_expected_covariance_matrix(self):
        CovMat = self.distr.ECovMat()
        MyCovMat = self.invW / (self.v - self.distr.D - 1)
        print MyCovMat, CovMat
        assert np.allclose(MyCovMat, CovMat)

    def test_post_update_soVB(self, rho=0.375):
        distrA = copy.deepcopy(self.distr)
        distrB = WishartDistr(distrA.v, invW=np.eye(distrA.D))
        self.distr.post_update_soVB(rho, distrB)
        assert self.distr.v == rho * distrA.v + (1 - rho) * distrB.v
        assert np.allclose(self.distr.invW,
                           rho * distrA.invW + (1 - rho) * distrB.invW)

    def test_entropy_posterior_gets_smaller(self, N=1):
        PRNG = np.random.RandomState(seed=8675309)
        for trial in range(3):
            X = PRNG.randn(N, self.distr.D)
            xxT = np.dot(X.T, X)

            SS = SuffStatBag(K=1, D=self.distr.D)
            SS.setField('N', [N], dims='K')
            SS.setField('xxT', [xxT], dims=('K', 'D', 'D'))

            postD = self.distr.get_post_distr(SS, 0)
            assert postD.D == self.distr.D
            Hpost = postD.get_entropy()
            Hprior = self.distr.get_entropy()
            print 'Prior %.3g, Post %.3g' % (Hprior, Hpost)
            print self.distr.invW
            print postD.invW
            assert Hpost < Hprior
 def setUp(self):
   self.v = 4
   self.invW = np.eye(2)
   self.distr = WishartDistr(v=self.v, invW=self.invW)
Exemple #9
0
 def setUp(self):
     self.v = 4
     self.invW = np.eye(2)
     self.distr = WishartDistr(v=self.v, invW=self.invW)