def compute_expected_pzk0_qjensen(self, k):
assert(k >= 0 and k < self._K)
tau = self._tau[:, 0:k + 1]
assert(tau.shape == (2, k + 1))
psi_tau = scipy.special.psi(tau)
assert(psi_tau.shape == (2, k + 1))
psi_sum_tau = scipy.special.psi(numpy.sum(tau, axis=0))
assert(len(psi_sum_tau) == k + 1)
psi_tau0_cumsum = numpy.hstack([0, numpy.cumsum(psi_tau[0, :-1])])
assert(len(psi_tau0_cumsum) == k + 1)
psi_sum_cumsum = numpy.cumsum(psi_sum_tau)
assert(len(psi_sum_cumsum) == k + 1)
tmp = psi_tau[1, :] + psi_tau0_cumsum - psi_sum_cumsum
assert(len(tmp) == k + 1)
q = numpy.exp(tmp - numpy.max(tmp))
assert(len(q) == k + 1)
q = q / numpy.sum(q)
assert(len(q) == k + 1)
# compute the lower bound
lower_bound = numpy.sum(q * (tmp - numpy.log(q)))
return lower_bound
评论列表
文章目录