def _update_item_params(self):
N = self.n_item
X_bar = np.mean(self.item_features_, 0).reshape((self.n_feature, 1))
# print 'X_bar', X_bar.shape
S_bar = np.cov(self.item_features_.T)
# print 'S_bar', S_bar.shape
diff_X_bar = self.mu0_item - X_bar
# W_{0}_star
WI_post = inv(inv(self.WI_item) +
N * S_bar +
np.dot(diff_X_bar, diff_X_bar.T) *
(N * self.beta_item) / (self.beta_item + N))
# Note: WI_post and WI_post.T should be the same.
# Just make sure it is symmertic here
WI_post = (WI_post + WI_post.T) / 2.0
# update alpha_item
df_post = self.df_item + N
self.alpha_item = wishart.rvs(df_post, WI_post, 1, self.rand_state)
# update mu_item
mu_mean = (self.beta_item * self.mu0_item + N * X_bar) / \
(self.beta_item + N)
mu_var = cholesky(inv(np.dot(self.beta_item + N, self.alpha_item)))
# print 'lam', lam.shape
self.mu_item = mu_mean + np.dot(
mu_var, self.rand_state.randn(self.n_feature, 1))
# print 'mu_item', self.mu_item.shape
评论列表
文章目录