1、矩阵分解出现的原因
传统的协同过滤依赖用户的历史行为来推测用户对未评分商品的评分(潜在兴趣),不需要了解物品的具体属性,也不需要知道用户的具体偏好,只需要历史评分数据就可以进行推荐,存在以下问题:
- 冷启动:新用户、新商品(没有历史行为信息的用户和商品)进行预测评分时就很难准确,难以做出有效的推荐。
- 过于稀疏:用户-物品评分矩阵通常是高度稀疏的,这意味着大多数用户并没有对大多数物品进行过评分,这导致基于相似性的推荐算法效果不佳。
- 计算量变大:随着用户和物品数量的增加,基传统的协同过滤的计算复杂度急剧上升,这限制了其在大规模数据集上的应用。
所以需要优化算法,我们迎来了矩阵分解算法,改进后的矩阵分解算法加强了处理稀疏矩阵的能力,能够理解用户和物品之间的潜在关系,可以预测更多可能性。
那么它是如何做到的?答案是通过隐向量做到的。
问题又来了,用户隐向量和物品隐向量是什么?矩阵分解是如何产生用户和物品隐向量的?为什么它们通过点积操作就可以理解潜在关系并且预测对未评分物品的兴趣,拿到了更多可能?
2、如何产生用户隐向量和物品隐向量?
用户-物品评分矩阵 R 是一个 m×n的矩阵,其中 m 是用户数量,n 是物品数量。矩阵中的每个元素 Rij 代表用户 i对物品 j的评分。如果用户 i 没有对物品 j 进行评分,则该位置是空缺的或标记为 0。
矩阵分解的目标是找到两个低秩矩阵U 和 I,其中 U 是用户隐向量矩阵,I 是物品隐向量矩阵,k 是隐向量的维度,一般远小于用户数 m 或物品数 n,使得 R≈U*(I的转置矩阵)
- 用户隐向量矩阵U:这是一个 m×k 的矩阵,每一行代表一个用户的偏好向量。
- 物品隐向量矩阵 I:这是一个 n×k 的矩阵,每一行代表一个物品的特征向量。
通过训练、迭代、更新用户隐向量矩阵U 和物品隐向量矩阵 I ,得到能够较好地近似原始评分矩阵 R的低秩稠密矩阵。
3、用户隐向量和物品隐向量是什么?
这些隐向量通常位于一个低维空间中,上面生成了m个用户隐向量和n个物品隐向量,它们每个隐向量都有k维,每个维度可以看作是一种潜在的特征或兴趣维度,这些隐向量揭示了用户和物品之间的潜在特征(比如用户对该潜在特征的偏好程度,物品该潜在特征的明显程度),尽管这些特征通常是不可解释的。但我们可以认为,每个维度反映了用户对某种类型的偏好以及物品的相应属性。
因为用户隐向量和物品隐向量在同一个坐标系中,所以可以通过计算距离和点积操作确定用户偏好和物品的契合程度,距离越近说明契合程度越高,用户对物品的潜在兴趣就越高。向量的点积操作会得到一个标量(简单来说就是一个常数),表示用户和物品在隐向量空间中的相似度,值越大,说明用户对物品的潜在兴趣就越高。
4、隐向量有什么用处?
降低计算量和复杂度:通过将整个稀疏的评分矩阵分解为低维稠密的用户隐向量矩阵和物品隐向量矩阵,实现了更好处理稀疏矩阵,显著减少计算量和存储需求。
预测未知评分:通过计算用户隐向量和物品隐向量的点积,即使在原始评分矩阵中没有直接的交互,也可以预测用户对未评分物品的潜在兴趣。
捕获潜在关系:即使用户没有对某个物品进行评分,也可以基于用户和物品的隐向量推断出潜在的兴趣,从而提供更准确的推荐。
减轻冷启动带来的影响:并不是指完全消除这一问题,而是设置隐向量初始值,随着新用户和新物品获得更多的交互数据,这些隐向量将变得越来越准确,从而提高推荐的质量。