在推荐系统中实现基于用户的协同过滤算法中,获取相似用户的方法实现。
基于用户的协同过滤算法
这种算法给用户推荐和他感兴趣相似的其他用户喜欢的物品,主要包括两个步骤:
1.找到和目标用户兴趣相似的用户集合
2.找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户
在这里分享两种寻找相似用户集合的方法,并返回她们的余弦相似度。代码是部分代码,仅供大家启发与参考。
def getSimilarUsers(userId : str, n : int =5):
cos_sim_list,cos_sim_values,users_list = [],[],[]
# Cosine similarity between each users
for i in r_df_matrix.index:
if i == userId: #remove itself
continue
cos_sim_list.append(cos_sim(r_df_matrix.loc[userId].values, df_matrix.loc[i].values))
# rank the cosine similar
user_indexs = np.argsort(cos_sim_list)[::-1][:(n)]
for i in user_indexs:
cos_sim_values.append(cos_sim_list[i])
users_list.append(df_matrix.index[i])
topk_userids = users_list # a list/numpy array of k userIds of top-k users
topk_cosines = cos_sim_values # a list/numpy array of k co