本文研究的主要是python协同过滤程序的相关内容,具体介绍如下。
关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看最近有什么好的电影推荐。在问的时候,都习惯于问跟自己口味差不多的朋友,这就是协同过滤的核心思想。
这个程序完全是为了应付大数据分析与计算的课程作业所写的一个小程序,先上程序,一共55行。不在意细节的话,55行的程序已经表现出了协同过滤的特性了。就是对每一个用户找4个最接近的用户,然后进行推荐,在选择推荐的时候是直接做的在4个用户中选择该用户item没包括的,当然这里没限制推荐数量,个人觉得如果要提高推荐准确率的画,起码,1,要对流行的item进行处理。2,将相邻的四个用户的item进行排序,从多到少的进行推荐。程序所用的数据是movielens上的(http://grouplens.org/datasets/movielens)。相似度的计算也很简单,直接用了交集和差集的比值。好吧,上程序
#coding utf-8 import os import sys import re f1=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协同过滤程序实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。