当前位置:文档之家› 矩阵分解在推荐系统中的应用1

矩阵分解在推荐系统中的应用1


利用矩阵分解预测缺失值的推荐算法
推荐系统的目标就是预测出符号“?”对应位置的 分值。推荐系统基于这样一个假设:用户对项目的 打分越高,表明用户越喜欢。因此,预测出用户对 未评分项目的评分后,根据分值大小排序,把分值 高的项目推荐给用户。
利用矩阵分解预测缺失值的推荐算法
矩阵分解目标就是把用户-项目评分矩阵R分解成用 户因子矩阵和项目因子矩阵乘的形式,即R=UV,这 里R是n×m, n =6, m =7,U是n×k,V是k×m。直 观地表示如下:
用数学表达的话,设用户向量是Nu,投影到U空间后的向量 为P,则有:
然后就可以计算这个用户(用P向量)与其他用户(Uk的各 行向量)之间的相似度了。大量的实验表明,计算相似度的 话还是使用欧式距离比较有效。上面的算法瓶颈是如何在 “茫茫人海”中找到最相似的那个User。
基于奇异值分解的推荐算法
使用基于物品的推荐不存在上面的计算瓶颈,因为我们探索 的是物品之间的相似度而不是用户之间的相似度。在大多数 系统中,物品比用户更稳定,不经常变化。所以,基于物品 的相似度非常适合预计算。 相类似的,如果要计算两Item之间的相似度需要使用Vk矩阵。 Vk 每一行代表一个Item,行之间越相近则代表Item之间越相 似。其计算过程与上面所讲的User之间的推荐过程很接近。
假定用S 乘以������ ,则有:
特征值与特征向量的意义
上例表明,即使������是一个任意的向量,用S 去乘以它 的效果都取决于S 的特征值及特征向量。另外,从 S ������ = 60 ������1 +80 ������2 +6 ������3,看出一个非常直观的结论就是, 相对而言,S ������的大小更不受S 的小特征值影响。上 例中,由于λ3=1,所以上式中最右边的加数的影响 较小。实际上,如果完全忽略上式的最右边对应于 λ3=1 的特征向量那么S������的结果就是(60,80,0)T而不是 正确结果(60,80,6)T,但是不论采用哪一种指标(比 如差向量的长度)来计算,这两个向量都相对比较 接近。这也意味着,对于矩阵-向量的乘积来说,较 小的特征值及其特征向量的影响也较小。
基于奇异值分解的推荐算法
【问】评分矩阵A,已知User=x, Item=y, 请问Rating=?
1) 从原始矩阵A中找到被User=x评过分的那些items;
2) 使用降维矩阵,找出被User=x评过分的跟Item=y最相似的那个Item;
3) 从原始矩阵A中获取被User=x评过分的最相似的Item的评分,并把这个 评分当做User=x对Item=y的评分。 与基于用户相似度推荐类似,在第二步计算中,如果Item=y已经在降维 矩阵中,则可计算;如果Item=y是一个新物品,则要先做投影,然后再 计算。
奇异值分解
特征值分解是一个提取矩阵特征很不错的方法,但 是它只是对方阵而言的,在现实的世界中,我们看 到的大部分矩阵都不是方阵,比如说有N个学生, 每个学生有M科成绩,这样形成的一个N * M的矩阵 就不可能是方阵,我们怎样才能描述这样普通的矩 阵呢的重要特征呢?奇异值分解可以用来干这个事 情,奇异值分解(SVD)是一个能适用于任意的矩阵的 一种分解的方法。
利用矩阵分解预测缺失值的推荐算法
高维的用户-项目评分矩阵分解 成为两个低维的用户因子矩阵 和项目因子矩阵,因此矩阵分 解和PCA不同,不是为了降维。 用户i对项目j的评分rij = <ui,vj>。 下面介绍评估低维矩阵乘积拟 合评分矩阵的方法。
首先假设,用户对项目的真实 评分和预测评分之间的差服从 高斯分布,基于这一假设,可 推导出目标函数如右图:
特征值与特征向量的意义
在数学上,特别是线性代数中,对于一个给定的线性变 换,它的特征向量V经过这个线性变换后,得到的新向 量仍然与原来的V保持在同一条直线上,但其长度也 许会改变.一个特征向量的长度在该线性变换下缩放 的比例称为其特征值. 对于特征向量,线性变换仅仅改变它们的长度,而 不改变它们的方向(除了反转以外),而对于其它 向量,长度和方向都可能被矩阵所改变。如果特征 值的模大于1,特征向量的长度将被拉伸,而如果特 征值的模小于1,特征向量的长度就将被压缩。如果 特征值小于0,特征向量将会被翻转。
矩阵分解在推荐系统中的应用(1)
重庆大学 余俊良
摘 要
• 线性代数基础知识
• 奇异值分解 • 梯度下降算法
• 一般矩阵分解 • 非负矩阵分解
• 上下文感知的矩阵分解 • 融合社会化信息的矩阵分解 • 实验分析
特征值与特征向量
对于M×M的方阵C 及非零向量������ ,有C ������ = λ ������ 。
设新的Item评分向量是Ni(mx1),处于U空间(m维),需要投影到Vk 空间(n维)。首先通过内积计算Ni在U空间中的坐标,然后使用Sk反向 伸缩坐标即可得到在V空间的坐标。
用数学表达的话,设用户向量是Ni,投影到V空间后的向量为P,则有:
基于奇异值分解的推荐算法
基于奇异值分解的推荐算法
SVD的缺点:
特征值与特征向量的意义
由上例可知,如果我们想要描述好一个变换,那我 们就描述好这个变换主要的变化方向就好了。看看 之前特征值分解的式子,分解得到的Σ矩阵是一个对 角阵,里面的特征值是由大到小排列的,这些特征 值所对应的特征向量就是描述这个矩阵变化方向 (从主要的变化到次要的变化排列)。
我们通过特征值分解得到的前N个特征向量,那么 就对应了这个矩阵最主要的N个变化方向。我们利 用这前N个变化方向,就可以近似这个矩阵(变 换)。也就是之前说的:提取这个矩阵最重要的特 征。
在第二步中,如果User=x已经在降维矩阵中,则按 上面步骤计算;如果User=x是一个新的用户,在计 算相似度之前,这个新用户必须冲n维空间投影到k 维空间中。
基于奇异值分解的推荐算法
如果知道SVD的空间几何意义,理解投影过程就很简单:原 来的用户的评分向量Nu(1xn)是在V空间中(n维),将其与Vk 矩阵相乘就知道这个用户向量的坐标,然后根据S进行坐标 缩放(同时截取前k个值即可),获得的坐标就是用户的评 分向量Nu在U空间中的坐标了。
基于奇异值分解的推荐算法
基于用户相似度的SVD推荐算法
【问】评分矩阵A,已知User=x, Item=y, 请问Rating=? 1) 从原始矩阵A中找出对Item=y评过分的所有用户;
2) 使用降维矩阵,找出对Item=y评过分的与User=x 最相近的那个User;
3) 从原始矩阵中获取最相似用户对Item=y的评分, 并把这个评分当做User=x对Item=y的评分。
奇异值分解
SVD能提供原始矩阵的最好的低阶线性近似。通过选取最大 的k个奇异值可以降低原始矩阵的维度。k的值会根据数据的 大小和结构而变化,一个典型的做法是保留矩阵中90%的能 量信息,即将奇异值的平方和累加到总值的90为止。在很多 情况下,前10%甚至1%的奇异值的和就占了全部的奇异值 之和的99%以上了。也就是说,我们也可以用前K个奇异值 来近似描述矩阵。
奇异值分解
令r 是M×N 矩阵C 的秩,那么C 存在如下形式的SVD:
U 是一个M×M 的矩阵,其每一列是矩阵CCT的正交 特征向量,而N×N 矩阵V 的每一列都是矩阵CTC 的 正交特征向量。 1.CCT 的特征值 λ1, λ2,…, λr 等于CTC 的特征值;
2.对于1≤ i ≤ r,令σi = λi ,并且 λi ≥ λi+1。M × N的 矩阵Σ 满足Σ ii=σi,其中1≤ i≤ r,而Σ 中其他元素均为 0。
设 V 和 W 是在相同域 K 上的向量空间。函数 f : V → W 被称为 是线性映射,如果对于 V 中任何两个向量 x 和 y 与 K 中任何标 量 a,满足下列两个条件: 可加性: ������ ������ + ������ = ������ ������ + ������(������)
简单来说就是,线性映射可以用矩阵-向量乘法表示。 在线性映射中,可以把N维向量投影到M维向量,N可以 不等于M.
当N==M时,也就是定义中的自同态映射.
特征向量与特征值在自同态的情况下产生.即N维到N 维的映射.
线性映射与矩阵
看下面几个二维空间自同态映射的例子.
逆时针旋转90 度 逆时针旋转θ 度:
SVD often raises difficulties due to the high portion of missing values caused by sparseness in the user-item ratings matrix. Conventional SVD is undefined when knowledge about the matrix is incomplete. Moreover, carelessly addressing only the relatively few known entries is highly prone to overfitting.
齐次性:
������ ������������ = ������������ ������
这等价于要求对于任何向量 x1, ..., xm 和标量 a1,..., am,方程 成立。
线性映射与矩阵
如果 V 和 W 是有限维的,并且在这些空间中有选择好 的基,则从 V 到 W 的所有线性映射可以被表示为矩阵; 如果 A 是实数的m×n矩阵,则规定f(x)=Ax描述一个线 性映射 Rn → Rm。
针对x轴反射
在所有方向上放大2 倍
挤压
向y轴投影
线性映射与矩阵
一个矩阵就是一个线性映射的描述,因为一个矩阵 乘以一个向量后得到的向量,其实就相当于将这个 向量进行了线性变换。
线性映射与矩阵
从前面的例子可以看到,矩阵对应了一个变换,是把 任意一个向量变成另一个方向或长度不同的新向量。 在这个变换的过程中,原向量主要发生旋转、伸缩的 变化。如果矩阵对某一个向量或某些向量只发生伸缩 变换,不对这些向量产生旋转的效果,那么这些向量 就称为这个矩阵的特征向量,伸缩的比例就是特征值。
相关主题