本质矩阵svd分解_SVD推荐系统

整理一下近期学习推荐系统算法的思路,定位一下SVD在整个推荐系统框架中的位置:

首先,我们知道,任何推荐系统的整体大框架都是两部分:对某个用户user而言:首先是从数百万种Item中粗略的选出千级别的Item(实现这种功能的方法叫做召回算法),然后从几百上千的Item中精细的预测算出用户对每个Item的具体评价分数,然后选出前十个评价分数最高的Item推荐给用户(实现该方法的过程称为排序算法

基于召回的算法,我们常常使用的有两种:基于用户行为的以及基于内容的。基于用户行为的推荐算法我们也称为协同过滤算法,基于内容的推荐算法后期详细讨论。而协同过滤算法又分为两大类,一类是基于邻域的协同过滤算法,一类是基于LFM(隐因子模型),而我们今天重点讨论的SVD算法就是召回算法里的LFM算法。

基于排序的算法,有LR,FM,GBDT+LR,GBDT+FM,深度学习的一些算法等等,后期会重点更新。

接下来,我们进入重点,SVD算法是如何实现的,其作用机理是什么?我们从以下三点讨论:

  1. SVD是什么
  2. SVD为什么可以使用到推荐系统中
  3. 推荐系统的SVD如何具体实现。

第一,SVD是什么。

SVD中文名字奇异值分解,顾名思义,是一种矩阵分解的方法,任何矩阵,都可以通过SVD的方法分解成几个矩阵相乘的形式。

数学表达式:

A=U*S* V,其中A就是被分解的矩阵,A矩阵是m* n维的,U是一个正交矩阵m * m维的,S是一个特征值矩阵(即对角元素均为A的特征值)m* n维,V也是一个正交矩阵n* n维的。

至于如何分解,请自行查阅数学书。好的,说白了,SVD就是一种矩阵分解的方法,将一个矩阵A分解成三个矩阵相乘,这只是一个数学上的一种“变化”,那他有啥具体的意义呢?

首先,SVD可用于矩阵降维,在ML中,如果我们处理的矩阵是一个非常高纬度的矩阵,即A的n是一个很庞大的数字(可能有上亿列),那我们该怎么办?此时就可以使用SVD进行矩阵降维。降维不是简单的维度变小,而是维度变小后,矩阵的原始信息没有发生很大改变(可以参考我前面的一篇关于PCA的最大方差理论来解释)。研究表明,一个矩阵的前10%的大的特征值可以代表90%的矩阵信息,所以可以借助该思想进行矩阵降维。上面提到,SVD的中间矩阵是一个特征值矩阵,如果我们只取前k个大的特征值,即可实现降维。具体来说:将原来的S矩阵变成m* k维,V变成k* k维,则最后A就变成m* k维的,实现了降维。(如何将原来的S矩阵变成m* k维,V变成k* k维?将分解后的特征值由大到小排序后,直接取S的前m行k列,V的k行k列即可。)

至此,我们使用到了SVD的第一个用途:降维,这在机器学习中有很大的实际意义。

接下来,我们解释SVD为什么可以使用到推荐系统中?

在这里,我们使用的思想和降维的出发点不一样,我们使用的是SVD可以进行“矩阵分解”这一特点。

我们在召回阶段的目的是由一个稀疏的评分矩阵推算出其中的空缺分数。(补充:评分矩阵是指每个用户对各个电影的评价分数,m行代表m个用户,n行代表n个电影)

我们的目的是得到用户对未评价电影的分数,而这种user-Item的评分矩阵中,用户对Item的分数是没有直接关系的,我们需要寻找一种隐空间,使得将用户和Item联系起来。比如我们无法得知user1对《利刃出鞘》这部电影的分数,但是我们可以通过用户的历史信息(即用户对别的电影的分数)得到用户对“悬疑”类电影的爱好程度,我们也可以得到某个电影的“悬疑类”的程度有多大,这样,我们就可以将这俩个关系联系到一起了,比如我们想用户A对《南方车站的故事》进行预测,我们无法直接得到他的分数,但是我们知道他对“悬疑”类的电影有多喜爱,而《南方车站的故事》的“悬疑”程度有多大,两个值相乘即可得到A对《南方车站的故事》的预测分数,这里我们只是使用到了一个维度:“悬疑”类,我们可以将矩阵A分解成m* k列的一共k个维度的矩阵,将电影分解成k * n列一共k个维度的矩阵,然后这两个矩阵相乘即可得到矩阵中空的A[i][j]的值。

说白了,我们这里使用到得SVD的思想只是说任何一个矩阵均可以分解成两个矩阵相乘的形式(SVD是三个,但也可以合并俩个得到两个矩阵),这俩个子矩阵分别代表了用户的偏好程度和电影的成分程度,将这两个矩阵相乘即可得到用户对电影的评分矩阵。

3.推荐系统的SVD如何具体实现。

至此,我们使用SVD的思想将矩阵A分解成两个矩阵相乘的形式(B*C),但事情没有那么简单,我们的推荐系统的矩阵A是一个稀疏矩阵,基本上是不能分解的,无法直接SVD,但分解的思想我们依旧要使用,所以我们使用机器学习的方法,使用最小均方误差学习到每个矩阵的各个元素,具体来讲就是,矩阵B的i行乘矩阵C的j列得到A的ij元素,有真实值的A[i][j]元素作为标签,不断地使用RMSE减小A中所有的标签,然后得到矩阵B和C,然后使用B和C取预测A中的空白缺失值。

那为什么SVD又称为隐语义模型(LFM)?因为这里我们的分解矩阵BC的维度k是不确定的,我们也不知道分解成几个成分,我们只是使用“悬疑”这一个成分特征来说明,可能机器学习不仅仅提取的是“悬疑”这个成分,还有很多成分,这些成分我们都不知道,所以又叫做隐语义,这里的分解其实是提取k个特征,具体工程中自己决定k值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值