def setEstParams(self, obsModel=None, SS=None, LP=None, Data=None, A=None, Sigma=None, **kwargs): ''' Initialize EstParams attribute with fields A, Sigma. ''' self.ClearCache() if obsModel is not None: self.EstParams = obsModel.EstParams.copy() self.K = self.EstParams.K return if LP is not None and Data is not None: SS = self.calcSummaryStats(Data, None, LP) if SS is not None: self.updateEstParams(SS) else: A = as3D(A) Sigma = as3D(Sigma) self.EstParams = ParamBag(K=A.shape[0], D=A.shape[1]) self.EstParams.setField('A', A, dims=('K', 'D', 'D')) self.EstParams.setField('Sigma', Sigma, dims=('K', 'D', 'D'))
def setPostFactors(self, obsModel=None, SS=None, LP=None, Data=None, nu=0, B=0, M=0, V=0, **kwargs): ''' Set Post attribute to provided values. ''' self.ClearCache() if obsModel is not None: if hasattr(obsModel, 'Post'): self.Post = obsModel.Post.copy() else: self.setPostFromEstParams(obsModel.EstParams) self.K = self.Post.K return if LP is not None and Data is not None: SS = self.calcSummaryStats(Data, None, LP) if SS is not None: self.updatePost(SS) else: M = as3D(M) B = as3D(B) V = as3D(V) K, D, E = M.shape assert D == self.D assert E == self.E self.Post = ParamBag(K=K, D=self.D, E=self.E) self.Post.setField('nu', as1D(nu), dims=('K')) self.Post.setField('B', B, dims=('K', 'D', 'D')) self.Post.setField('M', M, dims=('K', 'D', 'E')) self.Post.setField('V', V, dims=('K', 'E', 'E')) self.K = self.Post.K
def packParamBagForPost(pnu_K=None, ptau_K=None, w_KE=None, P_KEE=None, Post=None, **kwargs): ''' Parse provided array args and pack into parameter bag Returns ------- Post : ParamBag, with K clusters ''' pnu_K = as1D(pnu_K) ptau_K = as1D(ptau_K) w_KE = as2D(w_KE) P_KEE = as3D(P_KEE) K = pnu_K.size E = w_KE.shape[1] if Post is None: Post = ParamBag(K=K, D=E - 1, E=E) elif not hasattr(Post, 'E'): Post.E = E assert Post.K == K assert Post.D == E - 1 assert Post.E == E Post.setField('pnu_K', pnu_K, dims=('K')) Post.setField('ptau_K', ptau_K, dims=('K')) Post.setField('w_KE', w_KE, dims=('K', 'E')) Post.setField('P_KEE', P_KEE, dims=('K', 'E', 'E')) return Post
def setEstParams(self, obsModel=None, SS=None, LP=None, Data=None, mu=None, Sigma=None, **kwargs): ''' Create EstParams ParamBag with fields mu, Sigma ''' self.ClearCache() if obsModel is not None: self.EstParams = obsModel.EstParams.copy() self.K = self.EstParams.K return if LP is not None and Data is not None: SS = self.calcSummaryStats(Data, None, LP) if SS is not None: self.updateEstParams(SS) else: Sigma = as3D(Sigma) K, D, D2 = Sigma.shape mu = as2D(mu) if mu.shape[0] != K: mu = mu.T assert mu.shape[0] == K assert mu.shape[1] == D self.EstParams = ParamBag(K=K, D=D) self.EstParams.setField('mu', mu, dims=('K', 'D')) self.EstParams.setField('Sigma', Sigma, dims=('K', 'D', 'D')) self.K = self.EstParams.K
def setPostFromEstParams(self, EstParams, Data=None, N=None): ''' Set Post attribute values based on provided EstParams. ''' K = EstParams.K D = EstParams.D if Data is not None: N = Data.nObsTotal N = np.asarray(N, dtype=np.float) if N.ndim == 0: N = N / K * np.ones(K) nu = self.Prior.nu + N B = EstParams.Sigma * (nu - D - 1)[:, np.newaxis, np.newaxis] M = EstParams.A.copy() V = as3D(self.Prior.V) self.Post = ParamBag(K=K, D=D) self.Post.setField('nu', nu, dims=('K')) self.Post.setField('B', B, dims=('K', 'D', 'D')) self.Post.setField('M', M, dims=('K', 'D', 'D')) self.Post.setField('V', V, dims=('K', 'D', 'D')) self.K = self.Post.K