SVD在推荐系统中降维作用
原创 数分36计OpenDogs 数分36计开源狗 2024年11月27日 09:00 上海
一、奇异值分解(SVD)
奇异值分解(Singular Value Decomposition,SVD)是一种重要的矩阵分解方法,它能够将任意一个实数矩阵分解为三个具有特定性质的矩阵的乘积形式,从而揭示出矩阵所蕴含的内在结构和信息。
对于一个 的矩阵(其中 m可以看作是样本数量, n看作是特征数量),SVD 的核心思想是将其分解为:
具体来说,各部分含义如下:
-
矩阵:它是一个 的正交矩阵,即满足( 为单位矩阵)。 的列向量被称为左奇异向量,这些向量构成了矩阵 的行空间的一组正交基。从几何角度解释,左奇异向量定义了在 维空间中数据分布的一组特殊方向,每个方向都代表了数据在该维度上的一种特征表现,不同方向之间相互正交,能够从样本层面展现数据的结构特点。
-
矩阵:这是一个 的对角矩阵,其主对角线上的元素称为奇异值,且按照从大到小的顺序排列,记为,其余非主对角线上的元素均为。奇异值的大小反映了对应奇异向量所携带信息的重要程度,较大的奇异值意味着对应的奇异向量所描述的维度上数据的变化更为显著,对整个矩阵所代表的数据结构影响更大,是数据中主要信息的体现。
-
矩阵:是一个 的正交矩阵,满足,其列向量被称为右奇异向量,构成了矩阵 的列空间的一组正交基。右奇异向量从特征维度角度出发,揭示了原始数据在 维特征空间中的内在结构关系,表明了各特征之间是如何相互关联并共同影响数据整体形态的。
通过这样的分解,SVD 把原始矩阵 在由奇异向量所确定的新的“坐标轴”体系下,以一种根据信息重要性(由奇异值体现)有序排列的方式呈现出来,使得我们可以更清晰地洞察数据的核心结构以及各部分信息的相对重要性。
二、奇异值分解(SVD)公式
从数学公式的角度,对于给定的 矩阵,其奇异值分解的完整表达式为:
展开各矩阵具体形式如下:
其中,、 分别是矩阵 和 中的元素,它们满足各自正交矩阵的性质; 为奇异值,按照重要性递减顺序排列在 矩阵的主对角线上。
三、在推荐系统中的降维作用分析
(一)推荐系统背景与面临的问题
推荐系统旨在根据用户的历史行为(如浏览记录、购买记录、评分等)以及物品的相关特征,为用户精准地推荐他们可能感兴趣的物品。在实际应用中,通常会构建一个用户 - 物品评分矩阵(或行为矩阵),其中行代表用户,列代表物品,矩阵中的元素表示用户对物品的评分或某种行为表现(例如是否点击、购买等)。
然而,随着用户数量和物品数量的不断增加,这个矩阵往往会变得非常庞大且稀疏(因为用户通常只会对少量物品有行为记录),同时其维度也很高。高维度的数据不仅会占用大量的存储空间,还会导致计算复杂度大幅增加,例如在计算用户相似度、进行预测评分等操作时效率低下。而且过多的维度中可能包含大量噪声和冗余信息,影响推荐的准确性和质量。
(二)SVD 在推荐系统中降维的应用原理
在推荐系统中,我们可以将用户 - 物品评分矩阵(维度为, 为用户数量, 为物品数量)视为需要进行处理的矩阵 进行 SVD 分解,即。
基于奇异值大小反映信息重要性的特性,我们采用截断奇异值分解(Truncated SVD)的方法来实现降维。截断奇异值分解会选取前 个较大奇异值以及对应的左奇异向量和右奇异向量来近似重构原矩阵,将原矩阵 近似表示为:
其中, 是 的前 列组成的 矩阵, 是 的左上角 子对角矩阵, 是 的前 行组成的 矩阵。
通过选择合适的较小的 值(相较于原矩阵的秩),可以大幅减少需要存储的数据量,实现降维的目的。具体而言,降维带来了以下几方面的优势:
-
去除噪声和冗余信息:在原始的高维数据中,可能存在许多对推荐结果影响不大甚至起到干扰作用的维度,较小的奇异值对应的维度往往包含这类信息。通过截断奇异值分解舍去这些不重要的维度,相当于对数据进行了“提纯”,保留了最能体现用户和物品之间关系的关键信息,从而提高推荐的准确性。
-
提高计算效率:降维后的矩阵维度大大降低,无论是计算用户之间的相似度(例如使用余弦相似度等方法基于降维后的用户向量进行计算),还是进行预测评分等操作,计算量都会显著减少。这使得推荐系统能够更快地响应用户请求,实时性得到增强,尤其在处理大规模用户和物品数据时效果更为明显。
-
挖掘潜在特征关系: 和 中的向量分别代表了用户和物品在潜在特征空间中的表示。降维后的向量依然能够在一定程度上体现用户和物品之间潜在的、深层次的关联。例如,在降维后的空间中,通过分析用户向量之间的距离或相似度,可以发现具有相似兴趣偏好的用户群体;同样,分析物品向量之间的关系,可以挖掘出功能、风格等方面相似的物品,进而为个性化推荐提供有力依据。
(三)DEMO实现
import numpy as np
from sklearn.decomposition import TruncatedSVD
# 模拟生成用户 - 物品评分矩阵(假设100个用户,50个物品)
np.random.seed(42)
m = 100
n = 50
user_item_matrix = np.random.randint(1, 6, size=(m, n)) # 评分范围假设为1 - 5
# 使用 TruncatedSVD 进行降维
svd = TruncatedSVD(n_components=10) # 选择降维后的维度为10
user_item_matrix_reduced = svd.fit_transform(user_item_matrix)
# 对比原始矩阵和降维后矩阵的形状
print("原始用户 - 物品评分矩阵形状:", user_item_matrix.shape)
print("降维后用户 - 物品评分矩阵形状:", user_item_matrix_reduced.shape)
-
-
模拟用户 - 物品评分矩阵生成:利用
numpy
库的随机数生成功能,模拟创建一个100×50
的矩阵来代表用户 - 物品评分矩阵,这里的评分取值范围设定为1
到5
(可根据实际业务场景中的评分规则进行调整),同时通过设置随机种子42
保证每次生成的数据具有可复现性,便于测试和对比。 -
进行降维操作:引入
scikit-learn
库中的TruncatedSVD
类,实例化一个对象并指定n_components
参数为10
,表示选择保留的奇异值数量对应的维度为10
,即要将原始矩阵降维到10
维空间。然后调用fit_transform
方法对模拟的用户 - 物品评分矩阵进行降维处理,得到降维后的矩阵。 -
对比矩阵形状:简单打印原始用户 - 物品评分矩阵的形状以及降维后矩阵的形状,直观展示降维效果。在实际应用中,还需要进一步结合推荐算法,基于降维后的矩阵进行诸如用户相似度计算、推荐列表生成等操作,并通过评估指标(如准确率、召回率、F1 值等)来验证降维操作对推荐系统整体性能的提升效果。
奇异值分解在推荐系统中发挥着重要的降维作用,通过挖掘数据中的关键信息、去除噪声和冗余,并降低计算复杂度,能够有效提升推荐系统的性能和推荐质量,帮助系统更好地应对大规模、高维度的数据挑战,为用户提供更精准、高效的个性化推荐服务。