政策资讯

Policy Information


ML之RS之CF:基于用户的CF算法—利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分)

来源: 重庆市软件正版化服务中心    |    时间: 2022-09-19    |    浏览量: 68573    |   

ML之RS之CF:基于用户的CF算法—利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分)

目录

输出结果

实现代码


输出结果

先看推荐结果显示

实现代码

  1. from math import sqrt
  2. pearson距离
  3. def pearson_dis(rating1, rating2):
  4. sum_xy = 0
  5. sum_x = 0
  6. sum_y = 0
  7. sum_x2 = 0
  8. sum_y2 = 0
  9. n = 0
  10. for key in rating1:
  11. if key in rating2:
  12. n += 1
  13. x = rating1[key]
  14. y = rating2[key]
  15. sum_xy += x * y
  16. sum_x += x
  17. sum_y += y
  18. sum_x2 += pow(x, 2)
  19. sum_y2 += pow(y, 2)
  20. now compute denominator
  21. denominator = sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow(sum_y, 2) / n)
  22. if denominator == 0:
  23. return 0
  24. else:
  25. return (sum_xy - (sum_x * sum_y) / n) / denominator
  26. 查找最近邻函数
  27. def computeNearestNeighbor(username, users):
  28. """在给定username的情况下,计算其他用户和它的距离并排序"""
  29. distances = []
  30. for user in users: 全用户遍历,找到两个用户,计算pearson距离,依次添加到列表内
  31. if user != username:
  32. distance = manhattan_dis(users[user], users[username])
  33. distance = pearson_dis(users[user], users[username])
  34. distances.append((distance, user))
  35. distances.sort()
  36. return distances
  37. 进行推荐函数
  38. def recommend(username, users):
  39. nearest = computeNearestNeighbor(username, users)[0][1]
  40. recommendations = []
  41. neighborRatings = users[nearest]
  42. userRatings = users[username]
  43. for artist in neighborRatings:
  44. if not artist in userRatings:
  45. recommendations.append((artist, neighborRatings[artist]))
  46. results = sorted(recommendations, key=lambda artistTuple: artistTuple[1], reverse = True)
  47. for result in results:
  48. print(result[0], result[1])
  49. recommend('Jason', users)

相关文章推荐

ML之RS之CF:基于用户的CF算法—利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分)

评论

QQ咨询 扫一扫加入群聊,了解更多平台咨询
微信咨询 扫一扫加入群聊,了解更多平台咨询
意见反馈
立即提交
QQ咨询
微信咨询
意见反馈