推荐系统学习笔记(三)——矩阵分解(特征值分解,奇异值分解)

一、矩阵分解介绍

上一节介绍了协同过滤算法,针对协同过滤算法的头部效应较为明显,泛化能力弱的问题,矩阵分解算法被提出。矩阵分解在协同过滤算法中“共现矩阵”的基础上,加入了隐向量的概念,加强了模型处理稀疏矩阵的能力,针对性地解决了协同过滤存在的主要问题。下面就通过一张图来看矩阵分解算法和协同过滤算法的原理。
在这里插入图片描述
矩阵分解算法希望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上(如图2-4(b)所示),距离相近的用户和视频表明兴趣特点接近,在推荐过程中,就应该把距离相近的视频推荐给目标用户。例如,如果希望为图2-4(b)中的用户Dave推荐视频,可以发现离Dave的用户向量最近的两个视频向量分别是“Ocean’s 11”和“The Lion King”,那么可以根据向量距离由近到远的顺序生成Dave的推荐列表。

在“矩阵分解”的算法框架下,用户和物品的隐向量是通过分解共现矩阵得到的,如下图
在这里插入图片描述
矩阵分解算法将mxn维的共现矩阵R分解为m xk维的用户矩阵U和kxn维的物品矩阵V相乘的形式。其中m是用户数量,n是物品数量,k是隐向量的维度。k 的大小决定了隐向量表达能力的强弱。k 的取值越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k的取值越大,隐向量的表达能力越强,但泛化程度相应降低。此外,k的取值还与矩阵分解的求解复杂度直接相关.

那么基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分如下:
在这里插入图片描述
其中 p,是用户u在用户矩阵U中的对应行向量,qi是物品i在物品矩阵V中的对应列向量。

对矩阵进行矩阵分解的主要方法有三种:特征值分解(Eigen Decomposition ).奇异值分解( Singular Value Decomposition ,SVD)和梯度下降( GradientDescent)。

二、特征值分解

1.特征值与特征向量

特征值与特征向量是线代里面的知识,他们数学描述如下:

如果 A 是 n 阶方阵,数 λ 和 n 维非零列向量 x 是 A 的对应于特征值的特征向量,有:
A x = λ x Ax=λx Ax=λx
则矩阵A可以分解成
A = P Λ P − 1 A=P\Lambda P^{-1} A=PΛP1其中,P是这个矩阵 A 的特征向量组成的矩阵,Λ 是特征值组成的对角矩阵,当然对角阵Λ 特征值的摆放顺序要与特征向量一一对应。

由于特征值分解仅适用于方阵,因此不适用于用户-物品矩阵,下面讲解奇异值分解。

三、奇异值分解

1.定义与定理

矩阵的奇异值分解是指,将一个非零的mxn实矩阵A,表示为三个实矩阵乘积的运算,即进行矩阵的影子分解:
在这里插入图片描述
其中,U是m阶正交矩阵,V是n阶正交矩阵,∑是由降序排列的非负对角线元素组成的mxn矩形对角矩阵,满足
在这里插入图片描述

2.分解过程

由于公式不好编辑,这里直接附上周志华老师《统计学习方法》的截图,特征值讲的很细致,大家可以参考这本书来理解。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
可以说,奇异值分解似乎完美地解决了矩阵分解的问题,但其存在两点缺陷,使其不宜作为互联网场景下矩阵分解的主要方法。
(1)奇异值分解要求原始的共现矩阵是稠密的。
(2)传统奇异值分解的计算复杂度达到了o(mn^2)的级别,由于上述两个原因,传统奇异值分解也不适用于解决大规模稀疏矩阵的矩阵分解问题。

下一节讲解逻辑回归模型。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
求解大型矩阵奇异值分解是一种常见的数学问题,在多视图几何和机器学习领域得到广泛应用。奇异值分解(Singular Value Decomposition,SVD)是一种矩阵分解的方法,它将一个矩阵分解矩阵的乘积:A = UΣV^T,其U和V是正交矩阵,Σ是一个对角矩阵奇异值分解的重要性在于它可以提供矩阵的最佳低秩近似。 对于大型矩阵奇异值分解,可以使用一些高效的算法和工具来求解。例如,在MATLAB,可以使用svd函数来进行奇异值分解。这个函数可以接受大型矩阵作为输入,并返回相应的奇异值、左奇异向量和右奇异向量。 使用svd函数求解大型矩阵奇异值分解的代码如下所示: ```matlab % 定义一个大型矩阵A A = randn(1000, 1000); % 求解奇异值分解 [U, S, V = svd(A); % 输出结果 disp(U); disp(S); disp(V); ``` 上述代码,我们首先定义了一个1000x1000的随机矩阵A。然后,使用svd函数求解矩阵A的奇异值分解,并将结果存储在U、S和V变量。最后,我们输出了U、S和V的值。 需要注意的是,对于大型矩阵奇异值分解,计算时间可能会比较长,因此在实际应用需要考虑计算效率和内存消耗。一些优化的方法,如分布式奇异值分解等,可以在处理大规模数据时提高计算效率。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [利用SVD(奇异值分解)求解线性方程组.zip](https://download.csdn.net/download/a435262767/12883418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Matlab基础应用学习笔记.md](https://download.csdn.net/download/weixin_52057528/88284511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值