原理篇 | 推荐系统之矩阵分解模型

本文详细介绍了推荐系统中矩阵分解模型的数学原理,包括显式和隐式矩阵分解的目标函数、优化求解公式,以及如何在实际应用中处理数据稀疏性和计算效率问题。矩阵分解在推荐系统中的应用,如显式和隐式数据的处理,以及增量矩阵分解算法的使用,都进行了深入探讨。
摘要由CSDN通过智能技术生成


640?wx_fmt=gif




导语:本系列文章一共有三篇,分别是

《科普篇 | 推荐系统之矩阵分解模型》

《原理篇 | 推荐系统之矩阵分解模型》

《实践篇 | 推荐系统之矩阵分解模型》

第一篇用一个具体的例子介绍了MF是如何做推荐的。第二篇讲的是MF的数学原理,包括MF模型的目标函数和求解公式的推导等。第三篇回归现实,讲述MF算法在图文推荐中的应用实践(将于后续发布)。下文是第二篇——《原理篇 | 推荐系统之矩阵分解模型》敬请阅读。



上一篇我们用一个简单的例子讲述了矩阵分解(Matrix Factorization, MF)是如何做推荐的,但没有深入到算法的细节。如果想编写自己的代码实现MF,那么就需要了解其中的细节了。本文是MF系列的第二篇文章,主要介绍了显式矩阵分解和隐式矩阵分解的数学原理,包括模型思想、目标函数、优化求解的公式推导等,旨在为需要了解算法细节的同学提供参考。


1.显式数据和隐式数据

MF用到的用户行为数据分为显式数据和隐式数据两种。显式数据是指用户对item的显式打分,比如用户对电影、商品的评分,通常有5分制和10分制。隐式数据是指用户对item的浏览、点击、购买、收藏、点赞、评论、分享等数据,其特点是用户没有显式地给item打分,用户对item的感兴趣程度都体现在他对item的浏览、点击、购买、收藏、点赞、评论、分享等行为的强度上。


显式数据的优点是行为的置信度高,因为是用户明确给出的打分,所以真实反映了用户对item的喜欢程度。缺点是这种数据的量太小,因为绝大部分用户都不会去给item评分,这就导致数据非常稀疏,同时这部分评分也仅代表了小部分用户的兴趣,可能会导致数据有偏。隐式数据的优点是容易获取,数据量很大。因为几乎所有用户都会有浏览、点击等行为,所以数据量大,几乎覆盖所有用户,不会导致数据有偏。其缺点是置信度不如显式数据的高,比如浏览不一定代表感兴趣,还要看强度,经常浏览同一类东西才能以较高置信度认为用户感兴趣。


根据所使用的数据是显式数据还是隐式数据,矩阵分解算法又分为两种[4,6]。使用显式数据的矩阵分解算法称为显式矩阵分解算法,使用隐式数据的矩阵分解算法称为隐式矩阵分解算法。由于矩阵分解算法有众多的改进版本和各种变体[4,5,6,7,8,9,10,11],本文不打算一一列举,因此下文将以实践中用得最多的矩阵分解算法为例,介绍其具体的数据原理,这也是spark机器学习库mllib中实现的矩阵分解算法[4,6]。从实际应用的效果来看,隐式矩阵分解的效果一般会更好。


2.显式矩阵分解

在本系列第一篇文章中,我们提到,矩阵分解算法的输入是user对item的评分矩阵(图1等号左边的矩阵),输出是User矩阵和Item矩阵(图1等号右边的矩阵),其中User矩阵的每一行代表一个用户向量,Item矩阵的每一列代表一个item的向量。User对item的预测评分用它们的向量内积来表示,通过最小化预测评分和实际评分的差异来学习User矩阵和Item矩阵。

640

图1


2.1 目标函数

为了用数学的语言定量表示上述思想,我们先引入一些符号。设rui 表示用户对item 的显式评分,当rui >0时,表示用户对item 有评分,当rui =0时,表示用户对item 没有评分,x表示用户的向量,y表示item 的向量,则显式矩阵分解的目标函数为:

640?wx_fmt=png

其中xy都是维的列向量,为隐变量的个数,

640?wx_fmt=png

是所有x构成的矩阵,

640?wx_fmt=png

为所有y构成的矩阵,为用户数,为item数,λ为正则化参数。


在上述公式中,

640?wx_fmt=png

为用户向量与物品向量的内积,表示用户对物品的预测评分,目标函数通过最小化预测评分和实际评分rui 之间的残差平方和,来学习所有用户向量和物品向量。这里的残差项只包含了有评分的数据,不包括没有评分的数据。目标函数中第二项是L2正则项,用于保证数值计算稳定性和防止过拟合。


2.2 求解方法:

求解采用的是交替最小二乘法(alternative least square, ALS),也就是先固定优化,然后固定优化,这个过程不断重复,直到收敛为止。每次固定其中一个优化另一个都需要解一个最小二乘问题,所以这个算法叫做交替最小二乘方法。


(1)固定为上一步迭代值或初始化值,优化

此时,被当做常数处理,目标函数被分解为多个独立的子目标函数,每个子目标函数对应一个用户。对于用户,目标函数为:

640?wx_fmt=png

这里面残差项求和的个数等于用于评过分的物品的个数,记为个。把这个目标函数化为矩阵形式,得 

640?wx_fmt=png

其中,

640?wx_fmt=png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值