《推荐系统实践》第2章利用用户行为数据 学习笔记

    xiaoxiao2024-12-15  65

    第2章:利用用户行为数据

    日志存储在分布式数据仓库中,分为: 1、展示日志; 2、点击日志。

    分布式数据仓库: 1、支持离线分析:Hadoop Hive 2、支持在线分析:Google Dremel

    用户行为: 1、显性反馈行为:评分和喜欢/不喜欢 2、隐形反馈行为:页面浏览记录

    正反馈:用户喜欢该物品 负反馈:用户不喜欢该物品

    协同过滤算法(仅仅基于用户行为数据): 1、基于邻域的方法 1)基于用户:推荐和他兴趣形似的其他用户喜欢的物品 2)基于物品:推荐和他之前喜欢的物品相似的物品 2、隐语义模型 3、基于图的随机游走算法

    评测推荐系统有3种方法: 1、离线实验 2、用户调查 3、在线实验

    长尾分布:

    协同过滤算法的离线实验一般如下设计: 1、将用户行为数据集按照均匀分布随机分成M份,挑选一份作为测试集,将剩下的M-1份作为训练集。 2、在训练集上建立用户兴趣模型,并在测试集上对用户行为进行预测,统计出相应的评测指标。 注:为了保证评测指标并不是过拟合的结果,需要进行M次实验,并且每次都使用不同的测试集。然后将M次实验测出的评测指标的平均值作为最终的评测指标。

    将数据集随机分成训练集和测试集:

    def SplitData(data,M,k,seed): test = [] train = [] random.seed(seed) for user, item in data: if random.randint(0,M) == k: test.append([user,item]) else: train.append([user, item]) return train ,test

    这里,每次实验选取不同的k(0<=k<=M-1)和相同的随机种子seed,进行M次实验就可得到M个不同的训练集和测试集,然后分别进行实验,用M次实验的平均值作为最后的评测指标。这样做主要事防止某次实验的结果是过拟合的结果。

    评测指标: 1、召回率:描述有多少比例的用户-物品评分记录包含在最终的推荐列表中 2、准确率:描述最终的推荐列表中有多少比例是发生过的用户-物品评分记录 3、覆盖率:反应了推荐算法发掘长尾的能力,覆盖率越高,说明推荐算法越能将长尾中的物品推荐给用户 召回率、准确率、覆盖率的计算方法:

    def Recall(train,test,N): hit=0 all=0 for user in train.keys(): tu=test[user] rank=GetRecommendation(user,N) for item,pui in rank: if item in tu: hit += 1 all += len(tu) return hit/(all*1.0) def Precision(train,test,N): hit=0 all=0 for user in train.keys(): tu=test[user] rank = GetRecommendation(user,N) for item,pui in rank: if item in tu: hit += 1 all += N return hit/(all*1.0) def Coverage(train,test,N): recommend_items = set() all_items = set() for user in train.keys(): for item in train[user].keys(): all_items.add(item) rank = GetRecommendation(user,N) for item,pui in rank: recommend_items.add(item) return len(recommend_items)/(len(all_items)*1.0)

    基于物品的协同过滤算法主要分为两步: 1、计算物品之间的相似度。 2、根据物品的相似度和用户的历史行为给用户生成推荐列表。

    最新回复(0)