矩阵分解(MF,SVD)和协同过滤(CF)

本文介绍了协同过滤(CF)的基本思想,强调其在推荐系统中的作用。接着详细探讨了矩阵分解(MF)中的奇异值分解(SVD),包括SVD的定义、应用和如何用于主成分分析(PCA)。通过SVD进行低秩矩阵分解,解决了评分矩阵的缺失值问题,适用于大规模数据集的推荐算法。此外,还介绍了概率矩阵分解(PMF)的生成模型、模型推断以及最大后验概率MAP的优化过程。

协同过滤Collaborative Filtering

使用用户历史的行为来做未来的推荐。忽略了关于用户或item的先验信息。

  • CF使用与我相似的用户的评分来预测我的评分
  • CF是领域无关的,不需要知道现在在对什么评分,谁在评分,评分是多少

一种CF方法称为基于邻域的方法。例如

  1. 定义一个相似度评分,基于用户之间评分的重叠度
  2. 基于相似度评分,使用邻域内的评分来为我喜欢的item打分

过滤方法并不是互斥的。内容信息可以被添加到协同过滤系统来提升性能。

矩阵分解MF

这里写图片描述

SVD

我们知道矩阵的特征分解可以将矩阵分解成一组特征向量和特征值。
现在介绍另一种矩阵分解的方法,称为奇异值分解,将矩阵分解为奇异向量和奇异值。
每个实数矩阵都有一个奇异值分解,但不一定都有特征分解。例如,非方阵的矩阵没有特征分解,这时只能用奇异值分解。
在特征分解中,我们可以将矩阵M写作 M = V d i a g ( λ ) V − 1 M=Vdiag(\lambda)V^{-1} M=Vdiag(λ)V1
奇异值分解中,将矩阵M分解成 M = U S V T M=USV^T M=USVT,这里U和V都是正交矩阵,S是对角矩阵(S不一定是方阵)。
矩阵S对角线上的元素被称为矩阵M的奇异值
矩阵U的列向量被称为左奇异向量。矩阵V的列向量被称为右奇异向量
事实上,M的左奇异向量是 M M T MM^T MMT的特征向量。M的右奇异向量是 M T M M^TM MTM协方差矩阵)的特征向量。M的非零奇异值是 M T M M^TM MTM的特征值的平方根,同时也是 M M T MM^T MMT的特征值的平方根。
证明
对于正交矩阵有 A − 1 = A T A^{-1}=A^T A1=AT
M M T U = U S V T V S T U T = U S 2 = S 2 U MM^TU=USV^TVS^TU^T=US^2=S^2U MMTU=USVTVSTUT=US2=S2U,所以U的列向量是 M M T MM^T MMT的特征向量。

SVD应用

SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。下面我们就对SVD用于PCA降维做一个介绍。

SVD用于PCA

PCA中,需要找到样本协方差矩阵 X T X X^TX

### SVD算法与协同过滤算法的原理及应用 #### 用户-项目交互矩阵构建 为了实施协同过滤,首先需要建立用户-项目的交互矩阵(UI矩阵),其中每一行代表一个用户,每一列对应于一项商品或服务。该矩阵中的元素表示特定用户对某项产品给出的评价分数或其他形式的互动记录[^1]。 #### 基本概念解释 SVD即奇异值分解(Singular Value Decomposition),是一种线性代数技术,在降维的同时保留原始数据的主要特征。对于大规模稀疏矩阵而言尤其有用,可以有效减少维度并提高计算效率。通过将大而复杂的用户偏好模式简化成更易于管理的形式来捕捉潜在因素的影响[^4]。 #### UserCFItemCF两种主要类型的协同过滤 - **UserCF (基于用户的协同过滤)**:寻找具有相似偏好的其他用户群体,并据此推测目标用户可能感兴趣的新条目;这涉及到比较不同个体之间整体行为轮廓上的异同点。 - **ItemCF (基于物品的协同过滤)**:关注的是找到那些经常被共同喜欢的商品组合,从而向顾客推荐与其过去喜好相匹配的产品;此过程依赖于衡量各个对象间关联程度的方法论,比如余弦距离、皮尔森相关系数等统计量度工具[^5]。 #### 使用SVD改进传统协同过滤 当面对非常庞大且大部分为空白的数据集时,直接运用上述简单版本可能会遇到性能瓶颈以及过拟合风险等问题。此时引入SVD能够帮助缓解这些问题: - 对初始形成的巨大评分表执行低秩近似操作; - 提取出最重要的几个成分构成新的紧凑表达方式; - 利用这些浓缩后的信息重建预测模型以指导后续决策支持活动。 ```python import numpy as np from scipy.sparse.linalg import svds def compute_svd(user_item_matrix, k=50): U, sigma, Vt = svds(user_item_matrix, k=k) sigma = np.diag(sigma) predicted_ratings = np.dot(np.dot(U, sigma), Vt) return predicted_ratings ``` #### 应用实例展示 假设有一个在线视频平台想要为其用户提供个性化的影片建议,则可以通过收集观看历史形成相应的打分表格之后采用前述提到的技术手段来进行针对性推送。具体来说,先利用K-means聚类找出一批志趣相投的人群样本,再借助SVD优化过的内核函数求解最有可能引起共鸣的作品列表供其浏览挑选[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值