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

人工智能

第十三章 推荐系统

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

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

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

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

二、推荐系统的本质

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

三、推荐系统的原理

1. 推荐系统

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

2. 目标

  • 预测矩阵中所有未知项的评分,然后给用户推荐评分较高的未交互物品。
    【Python人工智能】Python全栈体系(二十二)_第1张图片

四、推荐算法的算法栈

【Python人工智能】Python全栈体系(二十二)_第2张图片

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

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

【Python人工智能】Python全栈体系(二十二)_第3张图片
【Python人工智能】Python全栈体系(二十二)_第4张图片
【Python人工智能】Python全栈体系(二十二)_第5张图片

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

【Python人工智能】Python全栈体系(二十二)_第6张图片
【Python人工智能】Python全栈体系(二十二)_第7张图片
【Python人工智能】Python全栈体系(二十二)_第8张图片

五、推荐系统的发展趋势

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

第十四章 电影推荐引擎

import numpy as np
import pandas as pd

ratings = pd.read_json('ratings.json')
ratings

【Python人工智能】Python全栈体系(二十二)_第9张图片

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

【Python人工智能】Python全栈体系(二十二)_第10张图片

# 基于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']
"""

你可能感兴趣的:(Python人工智能,python)