发布网友 发布时间:2023-07-13 23:15
共1个回答
热心网友 时间:2023-09-24 01:55
奇异值分解(Singular Value Decomposition,SVD)是一种常见的矩阵分解方式,对于一个 的矩阵 ,可定义其SVD为:
其中 为 矩阵, 是 矩阵, 为 矩阵,其除了对角线元素外全为0,即
由于奇异值矩阵包含了原矩阵的信息,其其中主要信息由较大的几个奇异值所表征,因此奇异值分解可用来作为矩阵降维,即:
在推荐系统中, 代表样本的用户数,维度通常会很高,当 时会大大减轻线上存储和计算的压力。基于矩阵分解的推荐算法的步骤可以分为:
(1)加载用户对物品的评分矩阵;
(2)矩阵分解,求奇异值,根据奇异值的能量占比确定降维至 的数值;
(3)使用矩阵分解对物品评分矩阵进行降维;
(4)使用降维后的物品评分矩阵计算物品相似度,对用户未评分过的物品进行预测;
(5)产生前 个评分值高的物品,返回编号并预测评分值。
SVD计算之前需要先把评分矩阵 补全,将稀疏矩阵变为稠密矩阵,这样就会带来一些问题:1. 稠密矩阵需要耗费巨大的存储空间;2. SVD计算复杂度很高,在大规模稠密矩阵上计算不现实。隐语义模型也是基于矩阵分解的,但是是将原始矩阵分解成两个矩阵相乘的形式:
其中 为用户因子矩阵, 为物品因子矩阵。
通常上式不会精确相等,需要最小化二者之间的差异,可通过如下损失函数来表达:
其中 表示用户 对物品 的评分交互,1表示有交互,0表示无交互, 表示用户偏爱某个商品的置信参数,交互次数多权重就会增加,如果用 表示交互次数的话,则可表示为 。
通过上述方法将协同过滤问题转化为了一个优化问题,求解上述损失函数通常采用交替最小二乘法(alternating least squares) ,计算过程如下:
(1)随机初始化 ,对上式中 求偏导,令导数为0,得到当前最优解
(2)固定 ,对上式 求偏导,令导数为0,得到当前最优解
(3)固定 ,对上式中 求偏导,令导数为0,得到当前最优解
(4)重复以上(2)到(3),直至达到迭代次数或收敛
为简明说明SVD的作用过程,采用 维的用户评分矩阵,行代表用户,列代表物品,数值代表评分,未评分值为0。
进行SVD分解,可以得到 三个矩阵, 值如下:
数据加载与相似度计算函数
定义几种相似度计算方法,包括Cosine相似度、欧几里得距离、皮尔逊相关系数,本文采用Cosine相似度。
SVD评分估计
基于矩阵奇异值分解转换的商品评价估计,实现过程的详述见注释
基于SVD进行推荐
寻找未评级的物品,对给定用户建立一个未评分物品列表,并计算评价值,进而推荐
结果分析
对于第2号用户, ,其未评价的列表为 ,则可计算得到未评价物品与所有已评价物品的相似度为:
对所有未评分物品的评分为:
推荐其中的前三个:
按照上述算法实现PQ分解的过程如下:
设置参数并对比分解后复原的结果原数据的差异
可见当k=10时,与原数据已十分接近,k=4时也比较接近,说明了矩阵分解能够表征原数据。
另外可以看出P,Q矩阵分别从横轴和纵轴提取了原矩阵的信息,进而可利用Q矩阵替代上文的V矩阵的作用而进行推荐,在此不予赘述。
[1]. https://blog.csdn.net/xiaoxiaowenqiang/article/details/78076984
[2]. 推荐系统与深度学习. 黄昕等. 清华大学出版社. 2019.
[3]. 推荐系统算法实践. 黄美灵. 电子工业出版社. 2019.
[4]. 推荐系统算法. 项亮. 人民邮电出版社. 2012.
[5]. 美团机器学习实践. 美团算法团队. 人民邮电出版社. 2018.
[6]. https://blog.csdn.net/recall_tomorrow/article/details/80218051