UserCF原理及其实现

作者: 七八音 | 来源:发表于2019-11-06 21:59 被阅读0次

    基于用户的协同过滤的原理及其实现.使用数据来自MoviesLens.之后行为结构,先介绍MoviesLens数据集,然后介绍基于用户的协同过滤UserCF算法原理,最后使用MoviesLens数据集实现一个简单的电影推荐系统.

    MoviesLens数据集

    MovieLens数据集包含多个用户对多部电影的评分数据,也包括电影元数据信息和用户属性信息。这里使用ml-1m数据,解压后有4个文件:movies.dat, users.dat, ratings.dat以及README介绍文件.

    movies.dat是电影数据信息文件,表明每个电影的信息,每行数据格式为:

    MovieID::Title::Genres
    # 电影编号::电影标题::电影分类
    

    users.dat是用户信息文件,包含用户的ID,性别,年龄,职业,邮编地址

    UserID::Gender::Age::Occupation::Zip-code
    
    • gender: M表示男性,F表示女性
    • age:
      • 1: "Under 18" 小于18岁
      • 18: "18-24"
      • 25: "25-34"
      • 35: "35-44"
      • 45: "45-49"
      • 50: "50-55"
      • 56: "56+"
    • occupation: 用户职业信息
      • 0: "other" or not specified
      • 1: "academic/educator"
      • 2: "artist"
      • 3: "clerical/admin"
      • 4: "college/grad student"
      • 5: "customer service"
      • 6: "doctor/health care"
      • 7: "executive/managerial"
      • 8: "farmer"
      • 9: "homemaker"
      • 10: "K-12 student"
      • 11: "lawyer"
      • 12: "programmer"
      • 13: "retired"
      • 14: "sales/marketing"
      • 15: "scientist"
      • 16: "self-employed"
      • 17: "technician/engineer"
      • 18: "tradesman/craftsman"
      • 19: "unemployed"
      • 20: "writer"

    ratings.dat是用户对电影评分数据文件.每行数据格式为:

    UserID::MovieID::Rating::Timestamp
    
    • UserIDs 范围在 1 - 6040
    • MovieIDs 范围在 1 - 3952
    • Ratings 评分数据以5星为标准 (只包含整星,不能为半星)
    • Timestamp表示从1970.1.1起的秒
    • 每个用户至少有20个评分数据

    UserCF原理

    基于用户的协同过滤算法.基本思想是针对用户u来说,先根据用户历史行为数据(这里指用户的电影评分数据)找到跟用户u相似的一个用户集,然后对用户u没有评分的电影,使用用户集的行为数据,根据用户u与用户群体中用户的相似度做加权平均,得到一个用户u没有看过电影的评分,根据评分排序,选择topK个电影作为用户u的推荐结果.

    实现UserCF主要关注几个点:

    • Users-Items矩阵: 如何根据用户历史行为数据得到这个矩阵;
    • 用户u的相似群体: 用户之间相似定义,评估,给出量化指标;
    • 用户u的推荐电影评分: 相似用户评分的加权平均,权重的定义,赋值

    users-items矩阵

    通过ratings.dat文件构建users-items矩阵,行表示用户u对所有电影的评分,范围是1-5;如果为0表示用户u还没有看过该电影

    用户相似度计算

    • 离散数据: 相似度计算公式
    • 这里采用余弦相似度计算公式:两个向量计算相似度

    通过用户之间的相似度计算,可以得到一个用户相似度矩阵.

    电影评分

    对于用户u,

    1. 根据用户相似度矩阵选择topK相似用户,形成集合S;
    2. 集合S中的用户评分过的电影中筛选掉用户u看过的电影,得到候选电影集N;
    3. 用户集合S和候选电影集N,推测用户u对没看过电影j的评分公式为
      • 其中,S(u,K)表示和用户u最相似的topK个用户
      • N(i):表示候选电影集

    代码实现

    实现效果

    • input: 用户u
    • output: 推荐结果topN列表

    流程

    为了实现上述的效果,我们需要读入电影数据movies.dat以及用户评分数据ratings.dat.

    • 根据ratings.dat得到users-items矩阵;
    • 使用UserCF得到topN推荐结果列表,内容是ids;
    • 根据topN列表电影id查询movies.dat,得到推荐电影名称

    具体参见代码:repo地址

    Code References

    推荐系统实战(二)--movieslens数据集实现UserCF算法

    相关文章

      网友评论

        本文标题:UserCF原理及其实现

        本文链接:https://www.haomeiwen.com/subject/anvpbctx.html