def gibbs_update_mask(self, i_iter):
mask_old = copy.deepcopy(self.mask)
assert self.common_component.K==1, "common component can only have one cluster component"
for i_dim in range(self.D):
mask_new = copy.deepcopy(self.mask)
# Compute log probability of `mask[i]`
log_prob_mask = np.zeros(2, np.float)
mask_new[i_dim] = 0
log_prob_mask[0] = self.log_marg_mask(mask_new)
mask_new[i_dim] = 1
log_prob_mask[1] = self.log_marg_mask(mask_new)
prob_mask = np.exp(log_prob_mask - logsumexp(log_prob_mask))
# Sample the new component assignment for `mask[i]`
k = utils.draw(prob_mask)
self.mask[i_dim] = k
self.p_bern = np.random.beta(self.bern_prior.a + np.sum(self.mask),
self.bern_prior.b + self.D - np.sum(self.mask), 1)[0]
self.make_robust_p_bern()
if i_iter % 20 == 0:
logging.info('p_bern_new: {}'.format(self.p_bern))
logging.info('mask old: {}'.format(mask_old))
logging.info('mask new: {}'.format(self.mask))
评论列表
文章目录