• 大小: 7KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-04
  • 语言: Python
  • 标签: 协同过滤  

资源简介

基于协同过滤的推荐系统,关于求RMSE的部分源码,简单易懂,易操作!学习python,对机器学习,推荐系统方面感兴趣的可以参考。

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
“““
Created on Fri May 26 10:31:22 2017

@author: lsl
“““

from math import sqrt
from similarity import MinkowskiDistance
from data import critics

#对未看过的电影评分
#未看过电影分数=sum(被推荐用户与其他用户之间相似度*用户对该电影评分)/sum(被推荐用户与其他用户之间相似度)
def recommendItems(criticsgivenpersonnum =5 simscore = MinkowskiDistance):
    ‘‘‘
    物品推荐:给定一个用户person默认返回num=5物品
    要两个for对用户,物品 都进行 遍历
    ‘‘‘
    #所有变量尽量用字典,凡是列表能表示的字典都能表示,那何不用字典
    itemsimsum={} 
    #存给定用户没看过的电影的其他用户评分加权
    itemsum={}

    #遍历每个用户,然后遍历该用户每个电影
    for otheruser in critics :
        #不要和自己比较
        if otheruser == givenperson:   continue
        #忽略相似度=0或小于0情况
        sim = simscore(criticsgivenpersonotheruser)
        if sim <=0:   continue
        
        for itemmovie in critics[otheruser]:
            #只对用户没看过的电影进行推荐,参考了其他用户的评价值(协同物品过滤是参考了历史物品相似度值)
            if itemmovie in critics[givenperson]:
                #一定要初始化字典:初始化itemsum与itemsimsum
                itemsum.setdefault(itemmovie0)
                itemsimsum.setdefault(itemmovie0)
                #用户相似度*评价值
                itemsum[itemmovie] += sim  * critics[otheruser][itemmovie]
                itemsimsum[itemmovie] += sim 
     
    #最终结果列表,列表包含一元组(分数,item)
    rankings = [(itemsum[itemmovie] / itemsimsum[itemmovie]itemmovie) for itemmovie in  itemsum]
    #结果排序
    rankings.sort(cmp=None key=None reverse=True);
    return rankings

#对所有电影评分
def all_rankings(**dd):
    #存所有电影评分
    all_rankings={}
    #存入某个人的电影评分字典
    rankings_d={}
#    rankings=[]
    k=[]
    #取出原始数据集中的键值,放入一个列表
    for key in dd.keys():
        k.append(key)
        
        for key in k:
            #调用recommendItems(critics key 7)函数,返回评分元组
            rankings=recommendItems(critics key 7) 
            
            #将评分元组rankings以字典的方式重新整合,形成评分字典all_rankings
            for (mn) in rankings:
                rankings_d[n]=m
            all_rankings[key]=rankings_d   
    #返回所有电影评分字典   
    return all_rankings   



#对数据集中所有已看的电影进行预测评分
def allwatched_rankings(**dd):    
   #存入所有已看电影评分 
   allwatched_rankings={}
   #存入某个人已看电影的评分
   a_r={}
   k=[]
   #取出原始数据集中的键值,放入一个列表
   for key in dd.keys():
       k.append(key)
       
       for d in k:
           #取出所有电影评分字典all_rankings(**dd)中dd所对应的键,值,比如dd中的‘Toby‘只含有三项电影评分,则取出所有评分字典中‘Toby‘对应的评分项
           a_r=dict([(itemall_rankings(**dd)[d][item])for item in dd[d]])  
           #形成新的评分字典,
           allwatched_rankings[key]=a_r
   #返回已看电影评分字典,字典形式如原始数据集        
   return allwatched_rankings        
‘‘‘
   #测试代码,作为备注参考
   for items in all_rankings(**dd)[key]:
       if items in dd[key]:
           
           all_rankings(**dd)[key]=items
           allwatched_rankings=all_rankings(**dd)
       else:
   

评论

共有 条评论