def run_e_step(self):
""" compute variational expectations
"""
ll = 0.
for p in range(self.N):
for q in range(self.N):
new_phi = np.zeros(self.K)
for g in range(self.K):
new_phi[g] = np.exp(psi(self.gamma[p,g])-psi(np.sum(self.gamma[p,:]))) * np.prod(( (self.B[g,:]**self.Y[p,q])
* ((1.-self.B[g,:])**(1.-self.Y[p,q])) )
** self.phi[q,p,:] )
self.phi[p,q,:] = new_phi/np.sum(new_phi)
new_phi = np.zeros(self.K)
for h in range(self.K):
new_phi[h] = np.exp(psi(self.gamma[q,h])-psi(np.sum(self.gamma[q,:]))) * np.prod(( (self.B[:,h]**self.Y[p,q])
* ((1.-self.B[:,h])**(1.-self.Y[p,q])) )
** self.phi[p,q,:] )
self.phi[q,p,:] = new_phi/np.sum(new_phi)
for k in range(self.K):
self.gamma[p,k] = self.alpha[k] + np.sum(self.phi[p,:,k]) + np.sum(self.phi[:,p,k])
self.gamma[q,k] = self.alpha[k] + np.sum(self.phi[q,:,k]) + np.sum(self.phi[:,q,k])
return ll
评论列表
文章目录