什么是推荐系统
维基百科这样解释道:推荐系统属于资讯过滤的一种应用。推荐系统能够将可能受喜好的资讯或实物(例如:电影、电视节目、音乐、书籍、新闻、图片、网页)推荐给使用者。
本质上是根据用户的一些行为数据有针对性的推荐用户更可能感兴趣的内容。比如在网易云音乐听歌,听得越多,它就会推荐越多符合你喜好的音乐。
推荐系统是如何工作的呢?有一种思路如下:
用户 A 听了 收藏了 a,b,c 三首歌。用户 B 收藏了 a, b 两首歌,这时候推荐系统就把 c 推荐给用户 B。因为算法判断用户 A,B 对音乐的品味有极大可能一致。
推荐算法分类
最常见的推荐算法分为基于内容推荐以及协同过滤。协同过滤又可以分为基于用户的协同过滤和基于物品的协同过滤
基于内容推荐是直接判断所推荐内容本身的相关性,比如文章推荐,算法判断某篇文章和用户历史阅读文章的相关性进行推荐。
基于用户的协同过滤就是文章开头举的例子。
基于物品的协同过滤:
假设用户 A,B,C 都收藏了音乐 a,b。然后用户 D 收藏了音乐 a,那么这时候就推荐音乐 b 给他。
动手打造自己的推荐系统
这一次我们要做的是一个简单的电影推荐,虽然离工业应用还差十万八千里,但是非常适合新手一窥推荐系统的内部原理。数据集包含两个文件:ratings.csv 和 movies.csv。
# 载入数据 import pandas as pd import numpy as np df = pd.read_csv('data/ratings.csv') df.head()
ratings.csv 包含四个维度的数据:
- userId:打分用户的 ID
- movieId: 被打分电影的 ID
- rating: 用户给电影的打分,处于[1,5]
- timestamp: 电影被打分的时间
要推荐电影还需要有电影的名字,电影名字保存在 movies.csv 中:
movies = pd.read_csv('data/movies.csv') movies.head()
将 ratings.csv 和 movies.csv 的数据根据 movieId 合并。
df = pd.merge(df, movie_title, on='movieId') df.head()
我们这次要做的推荐系统的核心思路是:
- 根据所有用户评分判断所有电影与用户 a 已观看的某部电影 A 的相似度
- 给用户 a 推荐相似度高且评分高的电影
所以我们要先有所有用户对所有电影的评分的列联表:
movie_matrix = df.pivot_table(index = 'userId', columns = 'title' ,values = 'rating') movie_matrix.head()
假设用户 A 观看的电影是 air_force_one (1997),则计算列联表中所有电影与 air_force_one (1997) 的相关性。
AFO_user_rating = movie_matrix['Air Force One (1997)'] simliar_to_air_force_one = movie_matrix.corrwith(AFO_user_rating)
这样我们就得到了所有电影与 air_force_one (1997)的相关性。
但是,直接对这个相关性进行排序并推荐最相关的电影有一个及其严重的问题:
ratings = pd.DataFrame(df.groupby('title')['rating'].mean())#计算电影平均得分 ratings['number_of_ratings'] = df.groupby('title')['rating'].count() import matplotlib.pyplot as plt %matplotlib inline ratings['number_of_ratings'].hist(bins = 60);
上图是电影被评分次数的直方图,可以看到大量的电影评分次数不足10次。评分次数太少的电影很容易就被判断为高相关性。所以我们要将这部分的评分删掉。
corr_AFO = pd.DataFrame(similar_to_air_force_one, columns = ['Correlation']) corr_AFO.dropna(inplace = True) corr_contact = corr_contact.join(ratings['number_of_ratings'],how = 'left',lsuffix='_left', rsuffix='_right') corr_AFO[corr_AFO['number_of_ratings']>100].sort_values(by = 'Correlation',ascending = False).head()
这样我们就得到了一个与 air_force_one (1997) 高相关的电影列表。但是高相关有可能评分低(概率低),再从列表里挑几部平均得分高的电影推荐就好了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。