你不知道的今日头条推荐系统( 三 )


第二步:基于用户的所有评分做出推荐1.生成每两部电影之间的相似度,并只保留流行电影的相似度

userRatings = ratings.pivot_table(index=['user_id'],columns=['title'],values='rating')
corrMatrix = userRatings.corr(method='pearson', min_periods=100)
2.对于每部用户看过并评分过的电影,生成推荐(这里我们选择用户0)
myRatings = userRatings.loc[0].dropna()
simCandidates = pd.Series()
for i in range(0, len(myRatings.index)):
#取出与评分过电影相似的电影
sims = corrMatrix[myRatings.index[i]].dropna()
#以用户对这部电影的评分高低来衡量它的相似性
sims = sims.map(lambda x: x * myRatings[i])
#将结果放入相似性候选列表中
simCandidates = simCandidates.Append(sims)
simCandidates.sort_values(inplace = True, ascending = False)
3.将所有相同电影的相似度加和
simCandidates = simCandidates.groupby(simCandidates.index).sum()
simCandidates.sort_values(inplace = True, ascending = False)
4.只保留用户没有看过的电影
filteredSims = simCandidates.drop(myRatings.index)
如何更进一步?在上面的实例中,Pandas与我们的CPU足以处理MovieLens的数据集 。然而,当数据集变得更庞大时,处理的时间也会变得更加漫长 。因此,你应该转为使用具有更强大处理能力的解决方案,如Spark或MapReduce 。
知识在于分享,转发这篇文章,让更多的人看到 。喜欢的朋友也可以点关注收藏!




推荐阅读