推荐系统之矩阵分解算法

矩阵分解算法是一种将矩阵分解为几个较小矩阵乘积的技术,广泛用于推荐系统、信号处理、数据压缩等领域,大致的矩阵分解算法有如下几种:
1.奇异值分解(Singular Value Decomposition, SVD)
2.非负矩阵分解(Non-negative Matrix Factorization, NMF)
3.交替最小二乘法(Alternating Least Squares, ALS)
4.隐语义模型(Latent Semantic Analysis, LSA)
5.概率矩阵分解(Probabilistic Matrix Factorization, PMF)
6.主成分分析(Principal Component Analysis, PCA)
7.隐狄利克雷分配(Latent Dirichlet Allocation, LDA)
8.张量分解(Tensor Factorization)
以上矩阵分解算法在推荐算法中各有优劣和适用的场景。本章只介绍前五种较为常用的算法。
奇异值分解(Singular Value Decomposition: SVD)
奇异值分解:是线性代数中一个重要的矩阵分解,是特征分解在任意矩阵上的推广。一种将任意矩阵分解为三个特定矩阵的乘积的方法。该算法有两种表达形式。在数据领域的复数矩阵中,对于任意的 m×n 矩阵 A,SVD 将其分解为一个 m×m 的正交矩阵 U,一个 m×n 的对角矩阵 Σ,和一个 n×n 的正交矩阵 V*。即为:
A = UΣV*
而在实际的应用场景中,我们通常处理的是实数矩阵,表达公式可为:其中( U )和( V )是正交矩阵,( Σ )是对角矩阵。
A = UΣV^T
应用步骤
1.收集数据:首先需要收集用户对物品的评分数据,这些数据通常表示为用户-物品评分矩阵,其中行代表用户,列代表物品,矩阵中的元素是用户对物品的评分。
1.预处理数据:对评分矩阵进行预处理,包括处理缺失值、归一化评分等。在许多情况下,评分矩阵是非常稀疏的,因为大多数用户只对极少数物品进行评分。
2.分解矩阵:使用SVD算法将用户-物品评分矩阵分解为三个矩阵:( U )(用户隐因子矩阵)、( \Sigma )(奇异值对角矩阵)、( V^T )(物品隐因子矩阵)。
3.降维:由于在实际应用中不需要所有的奇异值,可以通过选择前 ( k ) 个最大的奇异值来降维,这样 ( U ) 和 ( V^T ) 矩阵也相应地缩减为 ( U_k ) 和 ( V_k^T )。
4.构建近似矩阵:使用降维后的( U_k )、( Σ_k ) 和 ( V_k^T ) 来构建近似评分矩阵 ( A_k ),( A_k ) 是原始评分矩阵的一个低秩近似。
5.预测评分:使用近似评分矩阵 ( A_k ) 来预测缺失的评分,即用户对未评价物品的潜在评分。
6.推荐数据:根据预测的评分为每个用户生成推荐列表。通常,推荐系统会为每个用户推荐预测评分最高的几个物品。
示例
如链接:奇异值分解解释
推荐系统中应用场景
在推荐系统中主要应用于协同过滤算法,在原始的推荐系统中直接处理原始数据用户-物品关联矩阵,由于用户一般只会和少量物品有交互,这种操作一般都会有如下缺陷:
1.稀疏性:由于大量缺失的数据,直接使用原始矩阵进行推荐可能导致推荐质量不高。
2.可扩展性:随着用户和物品数量的增加,原始矩阵的维度会变得非常大,这会增加计算和存储的成本。
3.冗余和噪声:原始数据可能包含噪声和不相关的信息,这会影响推荐的准确性。
奇异值分解通过对用户-物品的关联矩阵进行降维,从原始高维空间提取关键特征,通过奇异值分析有以下优势:
1.强大的降维能力:SVD 能够有效地从原始高维空间提取关键特征。
2.去噪:通过保留最大的奇异值,SVD 可以去除数据中的噪声和冗余信息。
3.解释性:SVD 分解后的潜在特征有助于理解用户和物品之间的关系。
4.解决资源:通过对原始关联矩阵降维,分解成多个较小矩阵,节约存储成本
需要注意的是,当我们处理的是评分矩阵这样的稀疏矩阵时,标准的SVD并不适用,因为它要求矩阵是完整的。需要使用在SVD基础上进行相关优化的截断SVD,SVD++,隐因子模型等算法
注:截断SVD:由于许多奇异值可能非常小,只有前几个奇异值才包含大部分的信息。因此,我们可以选择保留前 ( k ) 个奇异值及其对应的向量,这样就可以将数据降维到 ( k ) 个潜在语义维度。这个过程被称为截断SVD(Truncated SVD)。

隐语义分析(Latent Semantic Analysis: LSA)
隐语义分析:一种自然语言处理和信息检索中使用的技术,用于从文本中提取和表示语义内容。LSA 的核心思想是通过对大量文本数据进行统计分析,发现词汇和文档之间隐含的结构关系,即“隐语义”。
LSA 通常是通过对术语-文档矩阵进行抽象降维来实现的。由于词汇的共现模式,这个矩阵能够反映出词汇之间的关系。
注:术语-文档矩阵(Term-Document Matrix):这个矩阵通常通过TF-IDF计算得出,每一行代表一个词汇,每一列代表一个文档,矩阵中的每个元素表示该词汇在该文档中的重要性(TF-IDF权重)
应用步骤
1.构建术语-文档矩阵:首先创建一个矩阵,矩阵中的元素通常是词频(TF)或TF-IDF值。
2.奇异值分解:对术语-文档矩阵进行SVD,将其分解为三个矩阵:( U )、( Σ ) 和 ( V^T )。其中 ( U ) 矩阵的列代表与词汇相关的潜在语义维度,( V^T ) 矩阵的行代表与文档相关的潜在语义维度,而 ( Σ ) 矩阵的对角线元素是奇异值,表示每个潜在语义维度的重要性。
3.降维:由于许多奇异值可能非常小,只有前几个奇异值才包含大部分的信息。因此,我们可以选择保留前 ( k ) 个奇异值及其对应的向量,这样就可以将数据降维到 ( k ) 个潜在语义维度。这个过程被称为截断SVD(Truncated SVD)。
4.构建潜在语义空间:通过截断SVD,我们得到了一个更低维度的术语-文档表示,这个空间被认为包含了词汇和文档的潜在语义结构。
示例

应用场景
1.文本处理

非负矩阵分解(Non-negative Matrix Factorization: NMF)
NMF是一种矩阵分解方法,要求分解后的矩阵所有元素都非负。它是解决数据挖掘和分析问题的有用工具,特别是在处理图像和文本数据时。
应用步骤
示例
应用场景

交替最小二乘法(Alternating Least Squares: ALS)

ALS是一种优化技术,用于解决矩阵分解问题,特别是在协同过滤推荐系统中。它通过交替固定一个矩阵并优化另一个矩阵来最小化重建误差。经常用于大规模协同过滤问题,特别是在处理隐式反馈数据(如点击、浏览而非显式评分)时。
应用步骤
示例
应用场景
1.处理隐式反馈数据(如点击、浏览而非显式评分)

概率矩阵分解(Probabilistic Matrix Factorization, PMF)
PMF是一种矩阵分解方法,它使用概率分布来建模观测数据,通过概率模型来处理评分矩阵,尤其是在存在噪声和不确定性的数据中。
应用步骤
示例
应用场景

算法评估
使用不同的算法推荐的结果各有不同,需要通过合适的评估模型评估算法的准确性,比如均方根误差(RMSE)或平均绝对误差(MAE)之类的指标来评估推荐系统的准确性。评估后针对不同的算法使用不同的方式进行调优,比如说针对SVD或者LSA算法选择不同的K值
评估过程

参考文档
1.SVD:https://zhuanlan.zhihu.com/p/676809666

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矩阵分解推荐算法是一种常用的推荐算法,可以通过将用户和物品的评分矩阵分解成两个低维矩阵的乘积来预测用户对未评分物品的评分。下面是一个使用Python实现的简单的矩阵分解推荐算法示例: ```python import numpy as np # 构造评分矩阵 R = np.array([[5, 3, 0, 1], [4, 0, 0, 1], [1, 1, 0, 5], [1, 0, 0, 4], [0, 1, 5, 4]]) # 设置超参数 K = 2 # 隐含因子个数 lr = 0.01 # 学习率 epochs = 5000 # 迭代次数 lambda_u = 0.02 # 用户矩阵正则化参数 lambda_v = 0.02 # 物品矩阵正则化参数 # 随机初始化用户矩阵和物品矩阵 U = np.random.randn(R.shape[0], K) V = np.random.randn(R.shape[1], K) # 训练模型 for epoch in range(epochs): # 遍历所有已知评分,更新用户矩阵和物品矩阵 for i in range(R.shape[0]): for j in range(R.shape[1]): if R[i, j] > 0: eij = R[i, j] - np.dot(U[i, :], V[j, :].T) # 预测误差 U[i, :] += lr * (eij * V[j, :] - lambda_u * U[i, :]) # 更新用户矩阵 V[j, :] += lr * (eij * U[i, :] - lambda_v * V[j, :]) # 更新物品矩阵 # 预测评分矩阵 R_pred = np.dot(U, V.T) # 输出预测结果 print(R_pred) ``` 在上面的代码中,我们使用numpy库构造了一个5x4的评分矩阵R,并设置了隐含因子个数K、学习率lr、迭代次数epochs以及正则化参数lambda_u和lambda_v。然后,我们随机初始化用户矩阵U和物品矩阵V,并使用梯度下降方法迭代更新这两个矩阵,直到达到最大迭代次数。最后,我们通过将用户矩阵U和物品矩阵V的乘积作为预测评分矩阵R_pred来预测用户对未评分物品的评分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值