user_items must contain 1 row for every user in userids

711 views Asked by At

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!

1

There are 1 answers

0
GrimSqueaker On

It's due to an API change: The fix is to use model.recommend(user_label, sparse_user_items[user_label]) instead of model.recommend(user_label, sparse_user_items) See: https://github.com/benfred/implicit/issues/535