• 【Python人工智能】Python全栈体系(二十二)


    人工智能

    第十三章 推荐系统

    一、推荐系统的背景与价值

    1. 推荐系统的应用场景1 – 网易云音乐

    • 个性化推荐:在面向用户的互联网产品中发挥着极其重要的作用。
    • Youtube 主页:60%+的视频点击率;
    • Netflix 观影站点:80%+的观看记录,每年10亿+盈利。

    2. 推荐系统的应用场景2 – 电商推荐

    二、推荐系统的本质

    • 推荐问题本质 – “猜你喜欢
      • 在面向用户的互联网产品中,代替用户评估其从未看过、接触过和使用过的物品,包括电影、新闻、音乐、参观、旅游景点等。推荐系统作为一种信息过滤的重要手段,是解决“信息过载”问题的最有效的方法之一。
      • 对于用户来说:帮助用户准确找到感兴趣的信息;
        • 具体表现:在有限的时间内,给用户曝光他潜意识里想看的、想买的物品…
      • 对于商家来说:帮助商家带来更多的用户关注、销量;
        • 具体表现:浏览更多、点击更多、购买更多…

    三、推荐系统的原理

    1. 推荐系统

    • 可以简单地被抽象成一个m x n 的矩阵R,行和列分别表示:用户、物品,m和n分别表示用户和物品数量。矩阵中的每一项代表:一个用户对一个物品的评分,“?”表示这个用户和这个物品之间没有交互(待预测)。

    2. 目标

    • 预测矩阵中所有未知项的评分,然后给用户推荐评分较高的未交互物品。
      在这里插入图片描述

    四、推荐算法的算法栈

    在这里插入图片描述

    • 在工业界算法不是最重要的,关键是怎么将算法跟产品形态很好的结合起来,快速上线,整个业务要形成闭环,具备迭代优化的能力。
    • 基于协同过滤的推荐
      • 基于用户的协同过滤推荐(User-Based CF):其本质就是计算用户之间的相似度,然后获取与目标用户相似度较高的用户,并将其交互物品中评分较高的推荐给目标用户。
      • 基于物品的协同过滤推荐(Item-Based CF):其本质就是计算物品之间的相似度,然后获取与目标用户交互物品相似度较高的物品,并将其推荐给目标用户。

    1. 典型算法1:基于用户的协同过滤推荐

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2. 典型算法2:基于物品的协同过滤推荐

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    五、推荐系统的发展趋势

    • 移动环境下 推荐系统成为主流
    • 近乎实时的个性化推荐服务
    • 可解释的推荐系统
    • 完整的推荐系统引擎 + 推荐系统作为云服务方式提供

    第十四章 电影推荐引擎

    import numpy as np
    import pandas as pd
    
    ratings = pd.read_json('ratings.json')
    ratings
    
    • 1
    • 2
    • 3
    • 4
    • 5

    请添加图片描述

    # 计算用户与用户的相似度矩阵
    simmat = ratings.corr()
    simmat
    
    • 1
    • 2
    • 3

    请添加图片描述

    # 基于simmat相似度矩阵 使用UBCF算法实现简单推荐引擎¶
    # 获取登录用户
    login_user = 'Michael Henry'
    # 寻找登录用户的相似用户,去掉自己,去掉反相关的用户
    sim_users = simmat[login_user]
    sim_users = sim_users.drop(login_user)
    sim_users = sim_users[sim_users>0]
    # 遍历所有相似用户,看一下相似用户都看过什么电影
    # 找个合适的数据结构,存储推荐列表,还有所有人对每一部推荐电影的打分
    # {"战狼1": [[4,5,3,4,5], [0.8,0.7,0.8,0.5,0.2]], "哪吒": [[3,4,5], [0.1, 0.2, 0.4]] .... }
    movie_list = {}
    for sim_user, sim_score in sim_users.items():
        movies = ratings[sim_user]
        # 检索一遍,哪些是登录用户没看过的,把这些电影给存起来
        for movie, score in movies.dropna().items():
            if np.isnan(ratings[login_user][movie]):
                # 没看过这个电影 把这电影给存起来
                if movie not in movie_list.keys():
                    movie_list[movie] = [[], []]
                movie_list[movie][0].append(score)
                movie_list[movie][1].append(sim_score)
    
    print(movie_list)
    # 对电影列表排序
    ml = sorted(movie_list.items(), key=lambda x:np.average(x[1][0], weights=x[1][1]), reverse=True)
    print(np.array(ml)[:,0])
    """
    {'Inception': [[2.5, 3.0, 3, 3.0], [0.9912407071619304, 0.3812464258315117, 0.924473451641905, 0.6628489803598702]], 
    'Anger Management': [[3.0, 1.5, 3.0, 2], [0.9912407071619304, 0.3812464258315117, 0.8934051474415644, 0.924473451641905]],
    'Jerry Maguire': [[3.0, 3.0, 4.5, 3, 3.0], [0.9912407071619304, 0.3812464258315117, 0.8934051474415644, 0.924473451641905, 0.6628489803598702]]}
    ['Jerry Maguire' 'Inception' 'Anger Management']
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    PMP每日一练 | 考试不迷路-11.05(包含敏捷+多选)
    Redis学习笔记——操作Hash
    贪心算法学习
    JavaScript 期约与异步函数的学习笔记
    干货分享!JAVA诊断工具Arthas在Rainbond上实践~
    教程八 在Go中使用Energy创建跨平台GUI应用 - Go执行JS函数
    用HTML+CSS做一个漂亮简单的个人网页——动漫网页【火影忍者】1个页面
    SQL Server 2008+ 性能调优
    【目标检测算法】利用Colab在线训练YOLO-V5
    AIR-CAP2702I-H-K9/AIR-CAP3602I-H-K9刷固件讲解
  • 原文地址:https://blog.csdn.net/sgsgkxkx/article/details/125607441