版权声明:本文为CSDN博主「后来者xq」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/houlaizhexq/article/details/39998135 做部分改动
Matrix Factorization与SVD
矩阵分解并不是SVD,SVD只是矩阵分解的一种技术。
基本思想
矩阵分解的思想简单来说就是每一个用户和每一个物品都会有自己的一些特性,用矩阵分解的方法可以从评分矩阵中分解出用户—特性矩阵,特性—物品矩阵,这样做的好处一是得到了用户的偏好和每件物品的特性,二是见底了矩阵的维度。图示如下:
使用用户对电影来举例子就是:每个用户看电影的时候都有偏好,这些偏好可以直观理解成:恐怖,喜剧,动作,爱情等。用户——特性矩阵表示的就是用户对这些因素的喜欢程度。同样,每一部电影也可以用这些因素描述,因此特性——物品矩阵表示的就是每一部电影这些因素的含量,也就是电影的类型。这样子两个矩阵相乘就会得到用户对这个电影的喜欢程度。
形式化描述
由于评分矩阵的稀疏性(因为每一个人只会对少数的物品进行评分),因此传统的矩阵分解技术不能完成矩阵的分解,即使能分解,那样计算复杂度太高,不现实。因此通常的方法是使用已存在评分计算出出预测误差,然后使用梯度下降调整参数使得误差最小。
首先说明一些符号的含义:表示预测
u
对 i
的打分, 表示物品
i
每个特性的归属度向量, 表示用户
u
对每个特性的喜欢程度的向量。因此,物品的预测得分为:
根据已有的数据计算误差并修正q和p使得误差最小,误差的表示方式如下:
上式利用评分矩阵中存在的评分数据,使用随机梯度下降方法进行参数的优化,后面是正则项,防止过拟合。
带偏置的矩阵分解
上面的式子是最基本的矩阵分解思想,但实际情况下,却并不是很好的衡量标准,比如有的网站中的用户偏向评价高分;有一些用户偏向评价高分(有的人比较宽容);有的物品被评价的分数偏高(也许由于等口碑原因)。
因此在上面的式子中一般都会加入偏置项,。综合用下面的式子表示:
预测公式变为:
损失函数为: