简单的python协同过滤程序实例代码

简单的python协同过滤程序实例代码,第1张

概述本文研究的主要是python协同过滤程序的相关内容,具体介绍如下。关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看最近有什

本文研究的主要是python协同过滤程序的相关内容,具体介绍如下。

关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看最近有什么好的电影推荐。在问的时候,都习惯于问跟自己口味差不多的朋友,这就是协同过滤的核心思想。

这个程序完全是为了应付大数据分析与计算的课程作业所写的一个小程序,先上程序,一共55行。不在意细节的话,55行的程序已经表现出了协同过滤的特性了。就是对每一个用户找4个最接近的用户,然后进行推荐,在选择推荐的时候是直接做的在4个用户中选择该用户item没包括的,当然这里没限制推荐数量,个人觉得如果要提高推荐准确率的画,起码,1,要对流行的item进行处理。2,将相邻的四个用户的item进行排序,从多到少的进行推荐。程序所用的数据是movIElens上的(http://grouplens.org/datasets/movielens)。相似度的计算也很简单,直接用了交集和差集的比值。好吧,上程序

#Coding utf-8import osimport sysimport ref1=open("/home/alber/data_base/bigdata/movIElens_train_result.txt",'r')  #读取train文件,已经处理成每一行代表一位用户的item,项之间用空格。f2=open("/home/alber/data_base/bigdata/movIElens_train_result3.txt",'a')txt=f1.readlines()contxt=[]f1.close()userdic={}for line in txt:  line_clean=" ".join(line.split())  position=line_clean.index(",")  ID=line_clean[0:position]  item=line_clean[position+1:]  userdic.setdefault(ID,item)  if len(item)>=5:           #对观影量少于5的用户不计入相似性计算的范围    contxt.append(item)for key in userdic.keys():        #计算每位用户的4个最相似用户  ID_num=key  value=userdic[key]   user_item=value.split(' ')   Sim_user=[]   for lines in contxt:     lines_clean=lines.split(' ')     intersection=List(set(lines_clean).intersection(set(user_item)))     lenth_intersection=len(intersection)     difference=List(set(lines_clean).difference(set(user_item)))     lenth_difference=len(difference)     if lenth_difference!=0:                            Similarity=float(lenth_intersection)/lenth_difference          #交集除以差集作为相似性的判断条件       Sim_user.append(Similarity)     else:       Sim_user.append("0")   Sim_user_copy=Sim_user[:]   Sim_user_copy.sort()   Sim_best=Sim_user_copy[-4:]   position1=Sim_user.index(Sim_best[3])   position2=Sim_user.index(Sim_best[2])   position3=Sim_user.index(Sim_best[1])   position4=Sim_user.index(Sim_best[0])   if position1!=0 and position2!=0 and position3!=0 and position4!=0:     recommender=userdic[str(position1)]+" "+userdic[str(position2)]+" "+userdic[str(position3)]+" "+userdic[str(position4)] #将4位用户的看过的电影作为推荐   else:    recommender="none"     reco_List=recommender.split(' ')  recomm=[]  for good in reco_List:    if good not in user_item:      recomm.append(good)    else:      pass  f2.write((" ".join(recomm)+"\n"))f2.close()

总结

以上就是本文关于简单的python协同过滤程序实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:@L_403_1@用Python实现协同过滤的教程 总结

以上是内存溢出为你收集整理的简单的python协同过滤程序实例代码全部内容,希望文章能够帮你解决简单的python协同过滤程序实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1200623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存