资源简介
基于协同过滤的推荐系统,关于求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:
- 上一篇:上下文无关文法转乔姆斯基范式CFG2CNFpython实现
- 下一篇:三点求圆算法
评论
共有 条评论