def _update_user_feature(self):
"""Fix item features and update user features
"""
for i in xrange(self.n_user):
_, item_idx = self.ratings_csr_[i, :].nonzero()
# number of ratings of user i
n_u = item_idx.shape[0]
if n_u == 0:
logger.debug("no ratings for user %d", i)
continue
item_features = self.item_features_.take(item_idx, axis=0)
ratings = self.ratings_csr_[i, :].data - self.mean_rating_
A_i = (np.dot(item_features.T, item_features) +
self.reg * n_u * np.eye(self.n_feature))
V_i = np.dot(item_features.T, ratings)
self.user_features_[i, :] = np.dot(inv(A_i), V_i)
评论列表
文章目录