通过学习本教程,你将会达到下面的目标:
·掌握什么是推荐系统,系统如何运作,以及它们之间不同的特点。
·使用Python以及TMDB5000部电影数据库来执行几个推荐系统。
什么是推荐系统?推荐系统(也常被称为推荐引擎/推荐平台),旨在预测用户对可获取物品的兴趣(例如Spotify上的歌曲)并给出相应的推荐。以下是两种主要的推荐系统:
·基于内容的过滤系统,会基于物品本身的特性给出推荐。因此,如果一名网飞用户热衷于科幻影片,网飞就能更迅速地给其推荐另一部科幻电影,而非浪漫爱情喜剧。我们接下来就将在Python上执行这一推荐系统。
·协同过滤系统会基于用户的反应给出推荐。比如说,有两位用户都在亚马逊上购买了电子吉他,其中一位用户同时还购买了放大器。那么,亚马逊就会预测另一位用户也对该放大器感兴趣,然后将这款产品推荐给该用户。
感谢IbtesamAhmed为这个数据库提供的Kaggle核函数。本文旨在用中等程序化格式遵循她的教程。
建立一个基础推荐系统启动
和往常一样,首先要导入必需的工具包和数据库:
importpandasaspdimportnumpyasnp()credits=_csv("tmdb_5000_")movies_incomplete=_csv("tmdb_5000_")(3.55,5.25)('BestRatedMostPopularBl',weight='bold')('Score',weight='bold')('MovieTitle',weight='bold')('scored_')这就是基于各占50%比例得出的推荐影片:
以上的推荐系统都能依照设计运作,但显然还可以继续改进。现在我们就一起来看看基于内容的过滤系统。
基于内容的过滤系统
现在要利用某一电影的特点来给用户推荐其他电影。继续遵循Ibtesam的示例,现在来根据电影在概述栏给出的情节梗概来进行推荐。比方说,如果用户提供了一部电影的名字,我们的目标就是推荐其他与该电影情节梗概相似的影片。
字节矢量化和TF-IDF算法
在开始分析情节梗概之前,需要将概述栏中的文本转化为文字矢量,同时也要在概述中加入TF-IDF算法。
__clean['overview']=movies_clean['overview'].fillna('')Computethesigmoidkernelsig=sigmoid_kernel(tfv_matrix,tfv_matrix)CredittoIbtesamAhmedfortheskeletoncodedefgive_rec(title,sig=sig):Getthepairwsiesimilarityscoressig_scores=list(enumerate(sig[idx]))Scoresofthe10mostsimilarmoviessig_scores=sig_scores[1:11]Top10mostsimilarmoviesreturnmovies_clean['original_title'].iloc[movie_indices]现在我们就用经久不衰的最爱影片:《非常小特务》来测试一下已经构建的基于内容的过滤系统。
#Testingourcontent-basedrecommationsystemwiththeseminalfilmSpyKidsgive_rec('SpyKids')以下是每个基于内容的过滤系统给出的推荐:
推荐系统给出了一些和《非常小特务》相关的影片,但也出现了一些偏差,如《无法自拔》和《毒枭帝国》。
局限性
基于上述结果,可以看到基于内容的过滤系统也有一些局限:
1.在用户搜索与《非常小特务》相似的电影时,此推荐系统可能会选出用户认为不相似的影片。为了改进此系统,可以考虑用单词计数替换TF-IDF算法,同时计算其他的相似分数。
2.此系统只会分析每部电影的情节梗概。如果想像Ibtesam一样分析其他特征,如演员、导演、电影流派等,就需要在寻找相似影片方面做出改进。
3.目前此系统只能基于影片特点的相关性给出推荐。因此会遗漏用户也许会感兴趣的其他流派的电影。我们需要使用协同过滤系统来解决这个问题,但现在的数据库并未包含用户信息。
留言点赞关注
我们一起分享AI学习与发展的干货