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

博客围绕利用用户行为数据展开,介绍日志存储于分布式数据仓库,含展示和点击日志,支持离线和在线分析的工具。阐述用户行为类型,介绍协同过滤算法及评测推荐系统的方法,还提及长尾分布、数据集划分及评测指标,如召回率、准确率、覆盖率等。

第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、根据物品的相似度和用户的历史行为给用户生成推荐列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值