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

开发者社区> 一个处女座的程序猿> 正文

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

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

输出结果


先看推荐结果显示


image.png



实现代码


from math import sqrt

#pearson距离

def pearson_dis(rating1, rating2):

   sum_xy = 0

   sum_x = 0

   sum_y = 0

   sum_x2 = 0

   sum_y2 = 0

   n = 0

   for key in rating1:

       if key in rating2:

           n += 1

           x = rating1[key]

           y = rating2[key]

           sum_xy += x * y

           sum_x += x

           sum_y += y

           sum_x2 += pow(x, 2)

           sum_y2 += pow(y, 2)

   # now compute denominator

   denominator = sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow(sum_y, 2) / n)

   if denominator == 0:

       return 0

   else:

       return (sum_xy - (sum_x * sum_y) / n) / denominator

#查找最近邻函数

def computeNearestNeighbor(username, users):

   """在给定username的情况下,计算其他用户和它的距离并排序"""

   distances = []

   for user in users:  #全用户遍历,找到两个用户,计算pearson距离,依次添加到列表内

       if user != username:  

           #distance = manhattan_dis(users[user], users[username])

           distance = pearson_dis(users[user], users[username])

           distances.append((distance, user))

   distances.sort()

   return distances

#进行推荐函数

def recommend(username, users):

   nearest = computeNearestNeighbor(username, users)[0][1]

   recommendations = []

   neighborRatings = users[nearest]

   userRatings = users[username]

   for artist in neighborRatings:

       if not artist in userRatings:

           recommendations.append((artist, neighborRatings[artist]))

   results = sorted(recommendations, key=lambda artistTuple: artistTuple[1], reverse = True)

   for result in results:

       print(result[0], result[1])

recommend('Jason', users)

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
排序算法大数据量测试代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Diagnostics; using System.IO; namespace Sort { class Program
813 0
EL之DT&RF&GBT:基于三种算法(DT、RF、GBT)对泰坦尼克号乘客数据集进行二分类(是否获救)预测并对比各自性能
EL之DT&RF&GBT:基于三种算法(DT、RF、GBT)对泰坦尼克号乘客数据集进行二分类(是否获救)预测并对比各自性能
26 0
ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
17 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4483 0
新零售企业如何借助全域数据中台进行自有用户洞察
全域数据中台能够提供:用户洞察数据模型、用户洞察分析、用户画像体系,帮助企业更加深入的了解用户,企业可以通过深度分析给用户提供更好的服务,建立客户关系管理,完善用户运营。
180 0
ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能)
ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能)
19 0
ML之xgboost:利用xgboost算法(结合sklearn)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
ML之xgboost:利用xgboost算法(结合sklearn)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
9 0
ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能
ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能
18 0
ML之LiR&SGDR:基于二种算法(LiR、SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
ML之LiR&SGDR:基于二种算法(LiR、SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
19 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载