示例#1
0
def eA(tau_a0,tau_a1,K):
    exp_ln_a = zeros((K,K))
    acc = digamma(tau_a0) - digamma(tau_a0 + tau_a1)
    for i in range(K):
        for j in range(K):
            exp_ln_a[i,j] = digamma(tau_a1[i,j]) - digamma(tau_a0[i,j] + tau_a1[i,j]) + acc[i,:j].sum()
    return exp_ln_a
示例#2
0
def eA(tau_a0,tau_a1,K):
    exp_ln_a = np.zeros((K,K))
    acc = digamma(tau_a0) - digamma(tau_a0 + tau_a1)
    for i in range(K):
        for j in range(K):
            exp_ln_a[i,j] = digamma(tau_a1[i,j]) - digamma(tau_a0[i,j] + tau_a1[i,j]) + acc[i,:j].sum()
    return exp_ln_a
示例#3
0
 def m(self,X,exp_z):
     #given expected value of z, calculate the variational parameters of each component (w.r.t. this sensor)
     alpha_c = self._hyperparams['c'] #assumes symmetric prior (though this is v. easy to change to non-symmetric prior)
     tau_ctk = alpha_c + dot(X.T, exp_z)
     self._tau_ctk = tau_ctk
     
     self._exp_ctk = tau_ctk / tau_ctk.sum(axis=0)
     self._exp_ln_ctk = digamma(tau_ctk) - digamma(tau_ctk.sum(axis=0))
示例#4
0
文件: sensors.py 项目: samholt/np-hmm
    def m(self, X, exp_z):
        #given expected value of z, calculate the variational parameters of each component (w.r.t. this sensor)
        alpha_c = self._hyperparams[
            'c']  #assumes symmetric prior (though this is v. easy to change to non-symmetric prior)
        tau_ctk = alpha_c + dot(X.T, exp_z)
        self._tau_ctk = tau_ctk

        self._exp_ctk = tau_ctk / tau_ctk.sum(axis=0)
        self._exp_ln_ctk = digamma(tau_ctk) - digamma(tau_ctk.sum(axis=0))
示例#5
0
def log_lambda(vk, dim, K, w):
    log = np.zeros((K,))

    for k in range(K):
        (_, log[k]) = slogdet(w[k, :, :])
        log[k] += np.sum([digamma((vk[k]+1-i)/2.0) for i in range(dim)])
    log += dim*np.log(2.0)
    return log   #[K,1]
示例#6
0
def Invcopt(W,vk,XDim,K):
    invc = [None for _ in range(K)]
    for k in range(K):
        dW = det(W[k])
        print 'dW',dW
        if dW>1e-30: ld = log(dW)
        else: ld = 0.0
        invc[k] = sum([digamma((vk[k]+1-i) / 2.) for i in range(XDim)]) + XDim*log(2) + ld
    return invc
示例#7
0
 def _eInvc(self,W,vk,XDim,K):
     invc = [None for _ in range(K)]
     for k in range(K):
         dW = np.linalg.det(W[k])
         #print 'dW',dW
         if dW>1e-30: 
             ld = np.log(dW)
         else: 
             ld = 0.0
         invc[k] = sum([digamma((vk[k]+1-i) / 2.) for i in range(XDim)]) + XDim*np.log(2) + ld
     return np.array(invc)
示例#8
0
def Piopt(alpha0,NK):
    alphak = alpha0 + NK
    pik = digamma(alphak) - digamma(alphak.sum())
    return pik
示例#9
0
def ePi(tau_pi0,tau_pi1,K):
    exp_ln_pi = np.zeros(K)
    acc = digamma(tau_pi0) - digamma(tau_pi0 + tau_pi1)
    for k in range(K): exp_ln_pi[k] = digamma(tau_pi1[k]) - digamma(tau_pi0[k] + tau_pi1[k]) + acc[:k].sum()
    return exp_ln_pi        
示例#10
0
def log_pi(alphak):
    return digamma(alphak) - digamma(alphak.sum())       #[K,]
示例#11
0
def ePi(tau_pi0,tau_pi1,K):
    exp_ln_pi = zeros(K)
    acc = digamma(tau_pi0) - digamma(tau_pi0 + tau_pi1)
    for k in range(K): exp_ln_pi[k] = digamma(tau_pi1[k]) - digamma(tau_pi0[k] + tau_pi1[k]) + acc[:k].sum()
    return exp_ln_pi