基于用户的协同过滤算法userCF和基于物品的协同过滤算法itemCF python实现
userCF
# -*- coding: utf-8 -*-
import math
class UserCF:
def __init__(self):
self.user_score_dict = self.initUserScore()
# self.users_sim = self.userSimilarity()
# self.users_sim = self.userSimilarityBetter()
self.users_sim = self.UserSimilarityBest()
# 初始化用户评分数据
def initUserScore(self):
user_score_dict = {
"A": {
"a": 3.0, "b": 4.0, "c": 0.0, "d": 3.5, "e": 0.0},
"B": {
"a": 4.0, "b": 0.0, "c": 4.5, "d": 0.0, "e": 3.5},
"C": {
"a": 0.0, "b": 3.5, "c": 0.0, "d": 0., "e": 3.0},
"D": {
"a": 0.0, "b": 4.0, "c": 0.0, "d": 3.50, "e": 3.0}}
return user_score_dict
# 计算用户之间的相似度,采用的是遍历每一个用户进行计算
def userSimilarity(self):
W = dict()
for u in self.user_score_dict.keys():
W.setdefault(u,{
})
for v in self.user_score_dict.keys():
if u == v:
continue
u_set = set( [key for key in self.user_score_dict[u].keys() if self.user_score_dict[u][key] > 0])
v_set = set( [key for key in self.user_score_dict[v].keys() if self.user_score_dict[v][key] > 0])
W[u][v] = float(len(u_set & v_set)) /</