• 大小: 4.72MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-29
  • 语言: Python
  • 标签: 基于物品  item  python  

资源简介

基于物品的协同过滤算法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.base
     文件      392629  2001-03-09 02:32  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u1.test
     文件     1583948  2001-03-09 02:33  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u2.base
     文件      395225  2001-03-09 02:33  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u2.test
     文件     1582546  2001-03-09 02:33  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u3.base
     文件      396627  2001-03-09 02:33  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u3.test
     文件     1581878  2001-03-09 02:33  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u4.base
     文件      397295  2001-03-09 02:33  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u4.test
     文件     1581776  2001-03-09 02:34  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u5.base
     文件      397397  2001-03-09 02:33  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\u5.test
     文件     1792501  2001-03-09 02:34  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\ua.base
     文件      186672  2001-03-09 02:34  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\ua.test
     文件     1792476  2001-03-09 02:34  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\ub.base
     文件      186697  2001-03-09 02:34  基于物品的协同过滤算法itemCF原理及python代码实现\ml-100k\ub.test

评论

共有 条评论