資源簡介
基于物品的協同過濾算法itemCF原理及python代碼實現

代碼片段和文件信息
#?-*-?coding=utf-8?-*-
import?math
import?sys
from?texttable?import?Texttable
from?collections?import?defaultdict
#from?Wtemp?import?*
from?operator?import?itemgetter
#讀取文件
def?readFile(fileData):
????data=[]
????rates=[]
????f=open(fileData“r“)
????data=f.readlines()
????f.close()
????for?line?in?data:
????????dataLine=line.split(“\t“)
????????rates.append([int(dataLine[0])int(dataLine[1])int(dataLine[2])])
????return?rates
#創建字典,生成用戶評分的數據結構
#???輸入:數據集合,格式:用戶id\t硬盤id\t用戶評分
#???輸出:1.用戶字典:dic[用戶id]=[(電影id電影評分)...]
#????????2.電影字典:dic[電影id]=[用戶id1用戶id2...]
def?createDict(rates):
????user_dict={}
????movie_dict={}
????for?i?in?rates:
????????if?i[0]?in?user_dict:
????????????user_dict[i[0]].append((i[1]i[2]))
????????else:
????????????user_dict[i[0]]=[(i[1]i[2])]
????????if?i[1]?in?movie_dict:
????????????movie_dict[i[1]].append(i[0])
????????else:
????????????movie_dict[i[1]]=[i[0]]
????return?user_dictmovie_dict
#建立物品倒排表計算物品相似度
def?itemCF(user_dict):
????N=dict()
????C=defaultdict(defaultdict)
????W=defaultdict(defaultdict)
????for?key?in?user_dict:
????????for?i?in?user_dict[key]:
????????????if?i[0]?not?in?N.keys():?#i[0]表示movie_id
????????????????N[i[0]]=0
????????????N[i[0]]+=1???????????????#N[i[0]]表示評論過某電影的用戶數
????????????for?j?in?user_dict[key]:
????????????????if?i==j:
????????????????????continue
????????????????if?j?not?in?C[i[0]].keys():
????????????????????C[i[0]][j[0]]=0
????????????????C[i[0]][j[0]]+=1??????#C[i[0]][j[0]]表示電影兩兩之間的相似度,eg:同時評論過電影1和電影2的用戶數
????for?irelated_item?in?C.items():
????????for?jcij?in?related_item.items():
????????????W[i][j]=cij/math.sqrt(N[i]*N[j])?
????return?W
#結合用戶喜好對物品排序
def?recommondation(user_iduser_dictK):
????rank=defaultdict(int)
????l=list()
????W=itemCF(user_dict)
????for?iscore?in?user_dict[user_id]:?#i為特定用戶的電影id,score為其相應評分
????????for?jwj?in?sorted(W[i].items()key=itemgetter(1)reverse=True)[0:K]:?#sorted()的返回值為listlist的元素為元組
????????????if?j?in?user_dict[user_id]:
????????????????continue
????????????rank[j]+=score*wj?#先找出用戶評論過的電影集合,對每一部電影id,假設其中一部電影id1找出與該電影最相似的K部電影,計算出在id1下用戶對每部電影的興趣度,接著迭代整個用戶評論過的電影集合,求加權和,再排序,可推薦出前n部電影,我這里取10部。
????l=sorted(rank.items()key=itemgetter(1)reverse=True)[0:10]
????return?l
????????????????????????????????
#獲取電影列表
def?getMovieList(item):
????items={}
????f=open(item“r“)
????movie_content=f.readlines()
????f.close()
????for?movie?in?movie_content:
????????movieLine=movie.split(“|“)
????????items[int(movieLine[0])]=movieLine[1:]
????return?items
#主程序
if?__name__==‘__main__‘:
????itemTemp=getMovieList(“E:/SHI/learning/python/ml-100k/u.item“)?#獲取電影列表
????fileTemp=readFile(“E:/SHI/learning/python/ml-100k/u.data“)?????#讀取文件
????user_dicmovie_dic=createDict(fileTemp)????????????????????????#創建字典
????user_id=66
????movieTemp=recommondation(user_iduser_dic80)???????????????#對電影排序
????rows=[]
????table=Texttable()??????????????????????????????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-09-11?10:47??基于物品的協同過濾算法itemCF原理及python代碼實現\
?????文件????????4018??2017-02-21?13:37??基于物品的協同過濾算法itemCF原理及python代碼實現\itemCFbyMyself.py
?????目錄???????????0??2018-09-11?10:47??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\
?????文件?????????716??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\allbut.pl
?????文件?????????643??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\mku.sh
?????文件????????6750??2016-01-30?04:26??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\README
?????文件?????1979173??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u.data
?????文件?????????202??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u.genre
?????文件??????????36??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u.info
?????文件??????236344??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u.item
?????文件?????????193??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u.occupation
?????文件???????22628??2000-07-20?05:09??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u.user
?????文件?????1586544??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u1.ba
?????文件??????392629??2001-03-09?02:32??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u1.test
?????文件?????1583948??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u2.ba
?????文件??????395225??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u2.test
?????文件?????1582546??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u3.ba
?????文件??????396627??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u3.test
?????文件?????1581878??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u4.ba
?????文件??????397295??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u4.test
?????文件?????1581776??2001-03-09?02:34??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u5.ba
?????文件??????397397??2001-03-09?02:33??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\u5.test
?????文件?????1792501??2001-03-09?02:34??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\ua.ba
?????文件??????186672??2001-03-09?02:34??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\ua.test
?????文件?????1792476??2001-03-09?02:34??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\ub.ba
?????文件??????186697??2001-03-09?02:34??基于物品的協同過濾算法itemCF原理及python代碼實現\ml-100k\ub.test
評論
共有 條評論