资源简介
基于用户最近邻模型的协同过滤算法的Python代码实现,用户相似度用Pearson相关系数进行计算。
代码片段和文件信息
#-------------------------------------------------------------------------------
# Name: PearsonUserNeighCF
# Purpose: Personalized Recommendation
#
# Author: Jinkun Wang
# Email: wangjinkun90@foxmail.com if you have any question about the
# code please do not hesitate to contact me.
#
# Created: 10/09/2014
# Copyright: (c) Jinkun Wang 2014
#-------------------------------------------------------------------------------
from math import sqrt
import numpy as np
import matplotlib.pyplot as plt
def loadData():
trainSet = {}
testSet = {}
movieUser = {}
u2u = {}
TrainFile = ‘ml-100k/u1.base‘ #指定训练集
TestFile = ‘ml-100k/u1.test‘ #指定测试集
#加载训练集,生成电影用户的倒排序表 movieUser
for line in open(TrainFile):
(userId itemId rating _) = line.strip().split(‘\t‘)
trainSet.setdefault(userId{})
trainSet[userId].setdefault(itemIdfloat(rating))
movieUser.setdefault(itemId[])
movieUser[itemId].append(userId.strip())
#防止测试集有训练集中没有出现过的项目
item_in_train = []
for m in movieUser.keys():
item_in_train.append(m)
#加载测试集
for line in open(TestFile):
(userId itemId rating _) = line.strip().split(‘\t‘)
testSet.setdefault(userId{})
testSet[userId].setdefault(itemIdfloat(rating))
return trainSettestSetmovieUseritem_in_train
#计算一个用户的平均评分
def getAverageRating(user):
average = (sum(trainSet[user].values()) * 1.0) / len(trainSet[user].keys())
return average
#计算用户相似度
def UserSimPearson(trainSet):
userSim = {}
for u1 in trainSet.keys():
userSim.setdefault(u1{})
u1_rated = trainSet[u1].keys()
for u2 in trainSet.keys():
userSim[u1].setdefault(u20)
if u1 != u2:
u2_rated = trainSet[u2].keys()
co_rated = list(set(u1_rated).intersection(set(u2_rated)))
if co_rated == []:
userSim[u1][u2] = 0
else:
num = 0 #皮尔逊计算公式的分子部分
den1 = 0 #皮尔逊计算公式的分母部分1
den2 = 0 #皮尔逊计算公式的分母部分2
sigma_u1_m = 0 #计算用户u1对共同评价项目的评分均值
sigma_u2_m = 0 #计算用户u2对共同评价项目的评分均值
for m in co_rated:
sigma_u1_m += trainSet[u1][m]
sigma_u2_m += trainSet[u2][m]
ave_u1_m = sigma_u1_m / len(co_rated)
ave_u2_m = sigma_u2_m / len(co_rated)
for m in co_rated:
num += (trainSet[u1][m] - ave_u1_m) * (trainSet[u2][m] - ave_u2_m) * 1.0
den1 += pow(trainSet[u1][m] - ave_u1_m 2) * 1.0
den2 += pow(trainSet[u2][m] - ave_u2_m 2) * 1.0
den1 = sqrt(den1)
den2 = sqrt(den2)
if den1 ==
相关资源
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
- 量化交易(附python常见函数的使用方
- python 名字用字排行
评论
共有 条评论