未加星标

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

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二05 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

本文研究的主要是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协同过滤程序实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


您可能感兴趣的文章:python实现协同过滤推荐算法完整代码示例用Python实现协同过滤的教程

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

tags: Sim,user,clean,line,difference,lenth,lines,index,userdic,best,intersection,过滤,用户
分页:12
转载请注明
本文标题:简单的python协同过滤程序实例代码
本站链接:https://www.codesec.net/view/572298.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(69)