资源简介
基于用户最近邻模型的协同过滤算法的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 ==
相关资源
- 尚硅谷2018年Python视频
- python自写的车牌识别小程序,完全自
- python面试笔记培训就业必回
- Django+Python搭建的购物网站
- python利用scipy的optimize实现非线性最小
- Python简单网页爬虫
- 自动发布mxd服务
- Python爬虫每日抓取必应壁纸
- python-igraph mac os 一键安装包
- python+opencv鼠标选择目标自动跟踪,
- Prometheus数据API导出Python脚本(export
- Programming Python 4th Edition 中文扫描版完
- python+django从mongo读取数据和图片展示
- 剑指offer 66编程题Python
- PyQt4中文教程chm版
- Python 垃圾分类查询
- python实现数字水印添加与提取及鲁棒
- python 写的一个json转csv文件的脚本
- RGSS3A解包器Python版
- python多人聊天服务器 socket
- Python 3网络爬虫开发实战
- 线性规划-单纯形法-窗体实现(pytho
- MACD指标股票量化投资策略源码
- python随机森林实现代码和
- python开发的基于串口通讯的上位机应
- 遗传算法实现入侵检测,AISpython实现
- Python零基础10天进阶班.rar
- python 超级玛丽 增强版本完整代码实现
- python3.8爬取拉勾教育mp4视频解密m3u8到
- isbn查询书籍详细信息2.0
评论
共有 条评论