引言
继搜索引擎之后,推荐系统改变了用户与网站之间的交互方式,在提高用户参与度和多样化推荐产品方面有重要的应用。亚马逊有35%的利润来源于它的推荐系统,Netflix有75%的用户根据推荐系统选择电影。
推荐系统是一个非常大的话题,本文介绍一种常用的基于模型的协同过滤算法——SVD(奇异值分解),在python中的使用。
假设我们用m个用户,n个商品,每个用户对每个商品的评分可以组成一个m*n的二维矩阵。当然,这个矩阵中会有非常多的值是不知道的,可能是用户没有用过这个商品,也有可能用户使用后没有进行评分。如下图所示
图中空白位置即未知的值。接下来,我们需要做的是根据这个残缺的二维矩阵中已知的值,预测出未知的值,即预测出每一个用户对每一个商品的评分。
可以想象,当矩阵被预测值补充完整之后,矩阵的每一行即表示一个用户对所有商品的评分,可以从这些评分中提取评分最高的几个商品推荐给用户,这样我们就完成了一个推荐系统模型。
接下来,就是如何通过已知值预测未知值的问题了,这里我们采用矩阵分解的方式,如图所示
中间矩阵可以拆分为左边和上边两个矩阵的乘积,这就是奇异值分解,一个矩阵总是可以拆分成两个矩阵相乘,SVD的原理可以见 这篇博客 ,SVD方法在推荐系统中应用的原理可以参考 这篇博客 ,下面,我们主要来讲讲如何在python中使用。