I want to use recommend method by imlicit library, I have made csr matrix like this
import scipy.sparse as sparse
user_items = sparse.csr_matrix((train['item_count'].astype(float),(train['client_id'], train['product_id'])))
item_users = sparse.csr_matrix((train['item_count'].astype(float),(train['product_id'], train['client_id'])))
but, when I tried to use recommend method in implicit, it showed
print('List of recommend Item for user:')
model.recommend(124, item_users)
List of recommend Item for user:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-151-100e4e122c46> in <module>
1 print('List of recommend Item for user:')
----> 2 model.recommend(124, item_users)
/usr/local/lib/python3.7/dist-packages/implicit/cpu/matrix_factorization_base.py in recommend(self, userid, user_items, N, filter_already_liked_items, filter_items, recalculate_user, items)
47 user_count = 1 if np.isscalar(userid) else len(userid)
48 if user_items.shape[0] != user_count:
---> 49 raise ValueError("user_items must contain 1 row for every user in userids")
50
51 user = self._user_factor(userid, user_items, recalculate_user)
ValueError: user_items must contain 1 row for every user in userids
I tried using the model.similar.items(), model.explain(), model.similar.user() methods, it was work perfectly, but when I tried the recoomend() methods it show error like before. Can anyone help?? thanks!
It's due to an API change: The fix is to use
model.recommend(user_label, sparse_user_items[user_label])instead ofmodel.recommend(user_label, sparse_user_items)See: https://github.com/benfred/implicit/issues/535