Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def IALS(sp_ratings, alpha=30, iters=10, lamb=0.1, k=10):
- confidence = sp_ratings * alpha
- N_users, N_items = sp_ratings.get_shape()
- X, Y = sp.csr_matrix(np.random.randn(N_users, k)), sp.csr_matrix(np.random.randn(N_items, k))
- I = sp.eye(k) * lamb
- X_I, Y_I = sp.eye(N_users), sp.eye(N_items)
- for i in tqdm(range(iters)):
- Ay = Y.T.dot(Y)
- Ax = X.T.dot(X)
- for u in tqdm(range(N_users)):
- u_row = confidence[u,:].toarray()
- p = u_row.copy()
- p[p != 0] = 1.0
- Cu = sp.diags(u_row, [0])
- B = Y.T.dot(Cu).dot(Y)
- C = Y.T.dot(Cu + Y_I).dot(p.T)
- X[u] = spsolve(Ay + B + I, C)
- for i in tqdm(range(N_items)):
- i_row = confidence[:,i].T.toarray()
- p = i_row.copy()
- p[p != 0] = 1.0
- Ci = sp.diags(i_row, [0]) + X_I
- B = X.T.dot(Ci).dot(X)
- C = X.T.dot(Ci).dot(p.T)
- Y[i] = spsolve(Ax + B + I, C)
- return X, Y
- def topn_recommendation_als(sp_ratings, item_vectors, user_vectors, user_id, N=30):
- user_history = sp_ratings[user_id,:].toarray()
- user_history = user_history.reshape(-1) + 1
- user_history[user_history > 1] = 0
- recom = user_vectors[user_id].dot(item_vectors.transpose()).toarray()
- recom = MinMaxScaler().fit_transform(recom.reshape(-1,1))[:,0]
- recommend_vector = user_history * recom
- item_idx = np.argsort(recommend_vector)[::-1][:N]
- topn = pd.DataFrame(item_idx, columns=['itemid'])
- topn['id'] = top_to_bottom_order[topn['itemid']]
- topn = pd.merge(topn, all_names, on='id', how='inner')
- return topn
Advertisement
Add Comment
Please, Sign In to add comment