什么是特征向量,特征值,矩阵分解
特征值是线性代数中的一个重要概念。在数学、物理学、化学、计算机等领域有着广泛的应用。设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是A的一个特征值(characteristic value)或本征值(eigenvalue)。非零n维列向量x称为矩阵A的属于(对应于)特征值m的特征向量或本征向量,简称A的特征向量或A的本征向量。————————摘自百度百科无尘剑 2023-05-23 19:24:091
【转】矩阵分解之SVD和SVD++
前面的内容是关于近邻推荐的相关知识,来看下另外一种推荐方法:矩阵分解。 协同过滤可以解决我们关注的很多问题,但是仍然有一些问题存在,比如: 上述两个问题,在矩阵分解中可以得到解决。原始的矩阵分解只适用于评分预测问题,这里所讨论的也只是针对于评分预测问题。常用的分解算法有SVD和SVD++。 矩阵分解,简单来说,就是把原来的大矩阵,近似分解成两个小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵。 具体来说,假设用户物品评分矩阵为 R,形状为 mxn,即 m 个用户, n 个物品。我们选择一个很小的数 k,k 比 m 和 n 都小很多,然后通过算法生成两个矩阵 P 和 Q,这两个矩阵的要求如下:P 的形状是 mxk,Q 的形状是 nxk, P 和 Q 的转置相乘结果为 R。也就是说分解得到的矩阵P和Q可以还原成原始的矩阵R。 用公式来描述就是: 其中 R 表示真实的用户评分矩阵,一般有很多缺失值(缺失值表示用户没有对该物品评分),带尖帽的 R 表示使用分解矩阵预测的用户评分矩阵,它补全了所有的缺失值。 从另一个角度来看,矩阵分解就是把用户和物品都映射到一个 k 维空间中(这里映射后的结果用户用矩阵P表示,物品用矩阵Q表示),这个 k 维空间不是我们直接看得到的,也不一定具有非常好的可解释性,每一个维度也没有名字,所以常常叫做隐因子。用户向量代表了用户的兴趣,物品向量代表了物品的特点,且每一个维度相互对应,两个向量的内积表示用户对该物品的喜好程度。 SVD 全程奇异值分解,原本是是线性代数中的一个知识,在推荐算法中用到的 SVD 并非正统的奇异值分解。 前面已经知道通过矩阵分解,可以得到用户矩阵和物品矩阵。针对每个用户和物品,假设分解后得到的用户 u 的向量为 p_u,物品 i 的向量为 q_i,那么用户 u 对物品 i 的评分为: 其中,K 表示隐因子个数。 问题关键来了,如何为每个用户和物品生成k维向量呢?这个问题可以转化成机器学习问题,要解决机器学习问题,就需要寻找损失函数以及优化算法。 这里单个用户对单个物品的真实评分与预测评分之间的差值记为 e{ui}。 将所有用户对物品的真实评分与预测评分之间的差值的平方之和作为损失函数,即 其中,R 表示所有的用户对所有物品的评分集合,K 表示隐因子个数。 我们要做的就是求出用户向量 p_u 和物品向量 q_i ,来保证损失函数结果最小。 求解损失函数优化算法常用的选择有两个,一个是梯度下降(GD),另一个是交替最小二乘(ALS) 。这里以梯度下降为例。 梯度下降算法的一个关键点在于计算损失函数对于每个参数的梯度。 在实际应用中,会存在以下情况:相比于其他用户,有些用户给分就是偏高或偏低。相比于其他物品,有些物品就是能得到偏高的评分。所以使用 pu*qi^T 来定义评分是有失偏颇的。我们可以认为 评分 = 兴趣 + 偏见。 其中,μ表示全局均值, bu表示用户偏见,bi表示物品偏见。 举例来说,一个电影网站全局评分为 3.5 分,你评分电影时比较严格,一般打分比平均分都要低 0.5,《肖申克的救赎》的平均分比全局平均分要高 1 分。这里 u=3.5,bu=-0.5,bi=1分。 实际生产中,用户评分数据很稀少,也就是说显式数据比隐式数据少很多,这些隐式数据能否加入模型呢? SVD++ 就是在 SVD 模型中融入用户对物品的隐式行为。我们可以认为 评分=显式兴趣 + 隐式兴趣 + 偏见。 那么隐式兴趣如何加入到模型中呢?首先,隐式兴趣对应的向量也是 k 维,它由用户有过评分的物品生成。 其中,|N(u)|表示用户u的行为物品集,yj表示物品j所表达的隐式反馈。 介绍了在评分数据中非常受欢迎 SVD 算法以及改进。比如加入偏置信息,考虑隐式反馈等。 推荐系统百问百答 参考:人类地板流精华2023-05-22 22:49:441
非负矩阵分解和奇异值矩阵分解的区别
假设M是一个m×n阶矩阵,其中的元素全部属于域K,也就是实数域或复数域。如此则存在一个分解使得M=UΣV*,其中U是m×m阶酉矩阵;Σ是半正定m×n阶对角矩阵;而V*,即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,i即为M的奇异值。常见的做法是为了奇异值由大而小排列。如此Σ便能由M唯一确定了。(虽然U和V仍然不能确定。)奇异值分解在某些方面与对称矩阵或Hermite矩阵基于特征向量的对角化类似。然而这两种矩阵分解尽管有其相关性,但还是有明显的不同。对称阵特征向量分解的基础是谱分析,而奇异值分解则是谱分析理论在任意矩阵上的推广。小菜G的建站之路2023-05-22 22:49:431
非负矩阵分解与奇异值分解的优缺点
非负矩阵分解与奇异值分解的优点:对称阵特征向量分解的基础是谱分析,而奇异值分解则是谱分析理论在任意矩阵上的推广。缺点:存在一些小的差异,奇异值分解需要对奇异值从大到小的排序,而且全部是大于等于零。所有的矩阵都可以进行奇异值分解,而只有方阵才可以进行特征值分解。当所给的矩阵是对称的方阵,A(T)=A,二者的结果是相同的。也就是说对称矩阵的特征值分解是所有奇异值分解的一个特例。从多元统计的观点看NMF是在非负性的限制下,在尽可能保持信息不变的情况下,将高维的随机模式简化为低维的随机模式H,而这种简化的基础是估计出数据中的本质结构W;从代数的观点看,NMF是发现数据的一种内在非负(或蕴涵更多性质的)代数分解形式或表示方法。从维数约减的观点看,因为基矩阵W和系数矩阵H同时由NMF来确定,系数矩阵H并非为数据矩阵V在W上的投影,所以NMF实现的是非线性的维数约减。小白2023-05-22 22:49:421
矩阵分解的奇异值分解法
奇异值分解有幂迭代法,QR算法,子空间方法等等。其中幂迭代法用于求最大的奇异值及奇异向量。QR算法是幂迭代算法的并行版本,也是最基本最稳定的算法。其他很多算法都通过各种变换,比如household变换,lanczos变换等等,将矩阵化为海森伯格阵,然后用QR算法求解。此外还有子空间方法,这个方法特别适用于求解大型稀疏矩阵的最大的几个奇异值及奇异向量。推荐一个blog,详细讲解奇异值分解的lanczos算法,QR算法,分治算法,和MRRR算法,这些都是当下最快的算法。并提供C++源码http://www.cnblogs.com/qxred/p/lanczos.htmlhttp://www.cnblogs.com/qxred/p/qralgorithm.htmlhttp://www.cnblogs.com/qxred/p/dcalgorithm.html再也不做站长了2023-05-22 22:49:412
matlab中怎么把一个矩阵分解为一个矩阵和另一个矩阵逆的乘积?
可以先分成两个矩阵,再将第二个矩阵取逆LU分解:将矩阵表示为一个下三角矩阵与一个上三角矩阵的乘积。[L,U]=lu(X): 产生L和U ,使得X=LU。>> A=[2,1,-1,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];>> b=[13,-9,6,0]";>> [L,U]=lu(A);>> x=U(L) QR分解:是将矩阵分解为一个正交矩阵和一个上三角矩阵的乘积. :[Q,R]=qr(X): 产生Q和R,使得X=QR。求逆:inv(A)阿啵呲嘚2023-05-22 22:49:361
如何将矩阵分解为行和列不等的矩阵和转置矩阵的乘积
理论上讲, A是实对称半正定阵的时候可以分解成U*U^T的形式, 注意半正定性是必须的既然是半正定的, 如果A的秩是r的话就可以通过合同变换得到A=C*D*C^T, 其中D=diag{I_r, 0}那么取U是C的前r列就行了如果用matlab, 自己查一下ldl函数的用法, 再加一步后处理就行了gitcloud2023-05-22 22:49:361
如何把一个矩阵分解成两个矩阵相乘
用高斯消去法把矩阵分解成许多初等矩阵的乘积,然后任意划分,可以写成两组初等矩阵的乘积,再分别计算两组初等矩阵的乘积,得到的两个矩阵,就是所求的两个矩阵,矩阵不唯一。凡尘2023-05-22 22:49:341
矩阵分解的三角分解法
三角分解法是将原正方 (square) 矩阵分解成一个上三角形矩阵或是排列(permuted) 的上三角形矩阵和一个 下三角形矩阵,这样的分解法又称为LU分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程,求逆矩阵,和求解联立方程组。不过要注意这种分解法所得到的上下三角形矩阵并非唯一,还可找到数个不同 的一对上下三角形矩阵,此两三角形矩阵相乘也会得到原矩阵。MATLAB以lu函数来执行lu分解法, 其语法为[L,U]=lu(A)。左迁2023-05-22 22:49:331
矩阵分解在生活中有哪些应用?
矩阵实际上是一种线性变换。矩阵分解相当于原来的线性变换可以由两次(或多次)线性变换来表示。例如A=[1 1 1 α=(x 2 3 4 y 1 2 3] z)则Aα=(x+y+z 2x+3y+4z x+2y+3z)即矩阵实质上是一种线性变换算符。<二>A=[1 1 [1 0 -1 2 3 * 0 1 2] 1 2] 这里以及下面为了表示方便,引入符号*表示矩阵乘法,遵循矩阵乘法规则。则Aα=[1 1 [1 0 -1 (x 2 3 * 0 1 2] * y 1 2] z) =[1 1 (x-z 2 3 * y+2z) 1 2] =(x+y+z 2x+3y+4z x+2y+3z)即矩阵分解实质上是将原来的线性变换等效为两次线性变换(或多次线性变换,如果分解后矩阵可以继续分解)kikcik2023-05-22 22:49:331
矩阵分解的一点总结
------------------------------------------------------------------------------------------------------------------------------------------------ 对于推荐系统来说存在两大场景即评分预测(rating prediction)与Top-N推荐(item recommendation,item ranking)。矩阵分解主要应用于评分预测场景。 推荐系统的评分预测场景可看做是一个矩阵补全的游戏,矩阵补全是推荐系统的任务,矩阵分解是其达到目的的手段。因此,矩阵分解是为了更好的完成矩阵补全任务(欲其补全,先其分解之)。之所以可以利用矩阵分解来完成矩阵补全的操作,那是因为基于这样的假设:假设UI矩阵是低秩的,即在大千世界中,总会存在相似的人或物,即物以类聚,人以群分,然后我们可以利用两个小矩阵相乘来还原它。 矩阵分解就是把原来的大矩阵,近似的分解成小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵。 具体来说就是,假设用户物品的评分矩阵A是m乘n维,即一共有m个用户,n个物品.通过一套算法转化为两个矩阵U和V,矩阵U的维度是m乘k,矩阵V的维度是n乘k。 这两个矩阵的要求就是通过下面这个公式可以复原矩阵A: 说起矩阵分解,我们第一个想起的就是SVD。 SVD分解的形式为3个矩阵相乘,左右两个矩阵分别表示用户/项目隐含因子矩阵,中间矩阵为奇异值矩阵并且是对角矩阵,每个元素满足非负性,并且逐渐减小。因此我们可以只需要前个K因子来表示它。 但SVD分解要求矩阵是稠密的,也就是说矩阵的所有位置不能有空白。有空白时我们的M是没法直接去SVD分解的。大家会说,如果这个矩阵是稠密的,那不就是说我们都已经找到所有用户物品的评分了嘛,那还要SVD干嘛! 的确,这是一个问题,传统SVD采用的方法是对评分矩阵中的缺失值进行简单的补全,比如用全局平均值或者用用户物品平均值补全,得到补全后的矩阵。接着可以用SVD分解并降维。 虽然有了上面的补全策略,我们的传统SVD在推荐算法上还是较难使用。因为我们的用户数和物品一般都是超级大,随便就成千上万了。这么大一个矩阵做SVD分解是非常耗时的。那么有没有简化版的矩阵分解可以用呢?我们下面来看看实际可以用于推荐系统的矩阵分解。 FunkSVD是在传统SVD面临计算效率问题时提出来的,既然将一个矩阵做SVD分解成3个矩阵很耗时,同时还面临稀疏的问题,那么我们能不能避开稀疏问题,同时只分解成两个矩阵呢?也就是说,现在期望我们的矩阵M这样进行分解: SVD分解已经很成熟了,但是FunkSVD如何将矩阵M分解为P和Q呢?这里采用了线性回归的思想。目标是让用户的评分和用矩阵乘积得到的评分残差尽可能的小,也就是说,可以用均方差作为损失函数,来寻找最终的P和Q。 在实际应用中,为了防止过拟合,会加入一个L2的正则化项。加入了正则化系数,需要调参。对于这个优化问题,一般通过梯度下降法来进行优化得到结果。 在FunkSVD算法火爆之后,出现了很多FunkSVD的改进版算法。其中BiasSVD算是改进的比较成功的一种算法。BiasSVD假设评分系统包括三部分的偏置因素:一些和用户物品无关的评分因素,用户有一些和物品无关的评分因素,称为用户偏置项。而物品也有一些和用户无关的评分因素,称为物品偏置项。这其实很好理解。比如一个垃圾山寨货评分不可能高,自带这种烂属性的物品由于这个因素会直接导致用户评分低,与用户无关。 一个用户给一个物品的评分会由四部分相加: 从左到右分别代表:全局平均分、物品的评分偏置、用户的评分偏置、用户和物品之间的兴趣偏好 BiasSVD增加了一些额外因素的考虑,因此在某些场景会比FunkSVD表现好。 SVD++算法在BiasSVD算法上进一步做了增强,这里它增加考虑用户的隐式反馈。它是基于这样的假设:用户除了对于项目的显式历史评分记录外,浏览记录或者收藏列表等隐反馈信息同样可以从侧面一定程度上反映用户的偏好,比如用户对某个项目进行了收藏,可以从侧面反映他对于这个项目感兴趣,具体反映到预测公式为: 学习算法依然不变,只是要学习的参数多了两个向量:x和y。一个是隐式反馈的物品向量,另一个是用户属性的向量,这样在用户没有评分时,也可以用他的隐式反馈和属性做出一定的预测。 它是基于这样的假设:用户的兴趣或者偏好不是一成不变的,而是随着时间而动态演化。于是提出了timeSVD,其中用户的和物品的偏置随着时间而变化,同时用户的隐含因子也随着时间而动态改变,在此物品的隐含表示并未随时间而变化(假设物品的属性不会随着时间而改变)。 其中,t为时间因子,表示不同的时间状态。 通过之前构建目标函数之后,就要用到优化算法找到能使它最小的参数。优化方法常用的选择有两个,一个是随机梯度下降(SGD),另一个是交替最小二乘(ALS),在实际应用中,交替最小二乘更常用一些,这也是推荐系统中选择的主要矩阵分解方法。 找到两个矩阵P和Q,让它们相乘后约等于原矩阵R: P和Q两个都是未知的,如果知道其中一个的话,就可以按照代数标准解法求得,比如知道Q,那么P就可以这样算: 也就是R矩阵乘Q矩阵的逆矩阵就得到了结果,反之,知道了P 再求Q 也一样,交替最小二乘通过迭代的方式解决这个鸡生蛋蛋生鸡的难题: 1)、初始化随机矩阵Q里面的元素值 2)、把Q矩阵当做已知的,直接用线性代数的方法求得矩阵P 3)、得到了矩阵P后,把P当做已知的,故技重施,回去求解矩阵Q 4)、 上面两个过程交替进行,一直到误差可以接受为止 使用交替最小二乘好处: 1.在交替的其中一步,也就是假设已知其中一个矩阵求解另一个时,要优化的参数是很容易并行的; 2.在不是很稀疏的数据集合上,交替最小二乘通常比随机梯度下降要更快的得到结果。 在很多推荐场景中,我们都是基于现有的用户和商品之间的一些数据,得到用户对所有商品的评分,选择高分的商品推荐给用户,这是funkSVD之类算法的做法,使用起来也很有效。但是在有些推荐场景中,我们是为了在千万级别的商品中推荐个位数的商品给用户,此时,我们更关心的是用户来说,哪些极少数商品在用户心中有更高的优先级,也就是排序更靠前。也就是说,我们需要一个排序算法,这个算法可以把每个用户对应的所有商品按喜好排序。BPR就是这样的一个我们需要的排序算法。 BPR根据像交替最小二乘那样完成矩阵分解,先假装矩阵分解结果已经有了,于是就计算出用户对于每个物品的推荐分数,只不过这个推荐分数可能并不满足均方根误差最小,而是满足物品相对排序最佳 得到了用户和物品的推荐分数后,就可以计算四元组的样本中,物品1和物品2的分数差,这个分数可能是正数,也可能是负数,也可能是0。如果物品1和物品2相对顺序为1,那么希望两者分数之差是个正数,而且越大越好;如果物品1和物品2的相对顺序是0,则希望分数之差是负数,且越小越好。 目标函数: 把这个目标函数化简和变形后,和把AUC当成目标函数是非常相似的,也正是因为如此,BPR模型宣称该模型是为AUC而生的。 SVDFeature 是由上海交大Apex Data & Knowledge Management Lab(APEX)开发的一个推荐系统工具包。他们提出了一种基于feature 的矩阵分解的框架。 它的目的是有效地解决基于特征的矩阵分解。新的模型可以只通过定义新的特征来实现。 这种基于特征的设置允许我们把很多信息包含在模型中,使得模型更加与时俱进。使用此工具包,可以很容易的把其他信息整合进模型,比如时间动态,领域关系和分层信息。除了评分预测,还可以实现pairwise ranking任务。 SVDFeature的模型定义如下: 输入包含三种特征<α,β,γ>,分别是用户特征,物品特征和全局特征。 SVD :要求矩阵是稠密的,时间复杂度高。不推荐使用。 FunkSVD :不在将矩阵分解为3个矩阵,而是分解为2个低秩的用户项目矩阵,同时降低了时间复杂度。 BiasSVD :考虑偏置项时使用,也就是用户的爱好。 SVD++ :考虑用户的隐式反馈时使用。主动点评电影或者美食的用户是少数,也就是说显示反馈比隐式反馈少,这个时候就可以根据用户的隐式反馈推荐。 timeSVD :考虑时间因素时使用。人是善变的,随着时间的流逝,兴趣也会发生变化。 ALS :考虑建模时间时使用。强烈推荐使用,这也是社交巨头 Facebook 在他们的推荐系统中选择的主要矩阵分解算法。 BPR :考虑排序结果时使用。 SVDFeature :当我们有多个特征时,可以使用。SVDFeature的目的就是解决基于特征的矩阵分解。 矩阵分解算法的缺点 :都没有解决冷启动问题 准确率表示预测正确的样本数占总样本数的比例。 TP(true positive):表示样本的真实类别为正,最后预测得到的结果也为正; FP(false positive):表示样本的真实类别为负,最后预测得到的结果却为正; FN(false negative):表示样本的真实类别为正,最后预测得到的结果却为负; TN(true negative):表示样本的真实类别为负,最后预测得到的结果也为负. 精确率表示预测为正样本的样本中,正确预测为正样本的概率。 召回率表示正确预测出正样本占实际正样本的概率。 折中了召回率与精确率。 对于评分预测任务,一般都是根据原有的评分数据,利用矩阵分解等方法去拟合原评分,使得优化后的模型可以去预测新的评分,这里就要衡量你预测的评分和实际评分的差异了,指标也很简单,分为RMSE和MSE。 MSE 是指参数估计值与参数真值之差平方的期望值; MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。 RMSE :RMSE是MSE的算术平方根。 AUC 这个值在数学上等价于:模型把关心的那一类样本排在其他样本前面的概率。最大是 1,完美结果,而 0.5 就是随机排列,0 就是完美地全部排错。 这个非常适合用来评价模型的排序效果,很适合作为BPR的评价指标。得到一个推荐模型后,按照它计算的分数,可以把用户想要的物品排在最前面。 具体的计算过程可看我的另一篇 文章 其中Rel表示与用户 u 相关的商品集(测试集), Rec表示推荐给用户的前K个列表,二者的交集除以Rec的集合元素个数(其实就是K),得到Precision@K。一般是算出每个用户的Precision@K,然后取平均值。 其中Rel表示与用户u相关的商品集(测试集),Rec表示推荐给用户的前K个列表,二者的交集除以Rec的集合元素个数(也就是测试集中用户u评过分的商品数),得到Recall@K。一般是算出每个用户的Recall@K,然后取平均值。 MAP(Mean Average Precision):单个主题的平均准确率是每篇相关文档检索出后的准确率的平均值。 主集合的平均准确率(MAP)是每个主题的平均准确率的平均值。 MAP 是反映系统在全部相关文档上性能的单值指标。 系统检索出来的相关文档越靠前(rank 越高),MAP就可能越高。如果系统没有返回相关文档,则准确率默认为0。 例如: 假设有两个主题,主题1有4个相关网页,主题2有5个相关网页。 某系统对于主题1检索出4个相关网页,其rank分别为1, 2, 4, 7; 对于主题2检索出3个相关网页,其rank分别为1,3,5。 对于主题1,平均准确率为(1/1+2/2+3/4+4/7)/4=0.83。对于主题2,平均准确率为(1/1+2/3+3/5+0+0)/5=0.45。 则MAP= (0.83+0.45)/2=0.64。 正确检索结果值在检索结果中的排名来评估检索系统的性能。 其中Q是用户的个数,rank是对于第i个用户,推荐列表中第一个在ground-truth结果中的item所在的排列位置。 举个例子:假如检索三次的结果如下,需要的结果(cat,torus,virus)分别排在3,2,1的话,此系统地MRR为(1/3 + 1/2 + 1)/3 = 11/18 比较复杂,可参考这篇 文章 参考文章: https://blog.csdn.net/qq_40006058/article/details/89432773 https://blog.csdn.net/weixin_41362649/article/details/82848132 https://blog.csdn.net/qq_19446965/article/details/82079367 https://www.cnblogs.com/pinard/p/9128682.html https://time.geekbang.org/column/article/5055FinCloud2023-05-22 22:49:321
怎么把一个矩阵分解成几个矩阵
把问题说的清楚具体些呗~拌三丝2023-05-22 22:49:324
矩阵分解在生活中有哪些应用
矩阵实际上是一种线性变换.矩阵分解相当于原来的线性变换可以由两次(或多次)线性变换来表示.例如A=[111α=(x234y123]z)则Aα=(x+y+z2x+3y+4zx+2y+3z)即矩阵实质上是一种线性变换算符.A=[11[10-123*012]12]这里以及下面为了表示方便,引入符号*表示矩阵乘法,遵循矩阵乘法规则.则Aα=[11[10-1(x23*012]*y12]z)=[11(x-z23*y+2z)12]=(x+y+z2x+3y+4zx+2y+3z)即矩阵分解实质上是将原来的线性变换等效为两次线性变换(或多次线性变换,如果分解后矩阵可以继续分解)善士六合2023-05-22 22:49:321
如何用matlab实现矩阵分解?
解:E(Y)=1*(0.12+0.03+0.15)+3*(0.05+0.25+0.20)+5*(0.15+0.02+0.03);E(X)=1*(0.12+0.05+0.15)+2*(0.03+0.25+0.02)+3*(0.15+0.20+0.03);E(XY)=1*1*0.12+1*2*0.03+1*3*0.15+3*1*0.05+3*2*0.25+3*3*0.20+5*1*0.15+5*2*0.02+5*3*0.03;Cov(X,Y)=E(XY)-E(X)E(Y)。扩展资料:数值分析的主要分支致力于开发矩阵计算的有效算法,这是一个已持续几个世纪以来的课题,是一个不断扩大的研究领域。 矩阵分解方法简化了理论和实际的计算。 针对特定矩阵结构(如稀疏矩阵和近角矩阵)定制的算法在有限元方法和其他计算中加快了计算。 无限矩阵发生在行星理论和原子理论中。 无限矩阵的一个简单例子是代表一个函数的泰勒级数的导数算子的矩阵小白2023-05-22 22:49:321
如何把一个矩阵分解成两个矩阵相乘
用高斯消去法把矩阵分解成许多初等矩阵的乘积,然后任意划分,可以写成两组初等矩阵的乘积,再分别计算两组初等矩阵的乘积,得到的两个矩阵,就是所求的两个矩阵,矩阵不唯一。CarieVinne 2023-05-22 22:49:321
矩阵分解
为什么要进行矩阵分解? 1、从矩阵变换的角度: 将复合变换后的矩阵分解成基本变换过程。具体请看奇异值分解之矩阵变换角度。 2、从 研究动机 的角度: 首先要理解基变换(坐标变换)再理解特征值的本质。 1、如果一个矩阵的行列式为0(非满秩),其特征值为0,这个证明比较简单: (单位矩阵有时候用 表示,有时候用 表示。) 如果 ,那么 ,进而 2、对于一个 的矩阵 ,其 ; 3、主对角线上的元素都不为0,其他元素都为0的矩阵叫对角矩阵,对角矩阵一定是正交矩阵,即其基两两垂直。 特征值分解就是矩阵的对角化,就是可以将 分解为 , 是由对应特征向量组成的矩阵--特征矩阵, 为对角矩阵,对角线上的元素为 的特征值。只有在一定条件下,一个变换可以由其特征值和特征向量完全表述,也就是说: 所有的特征向量组成了空间的一组基 。并不是所有方阵都可以对角化,方阵 可以被对角化的条件是 : 正交矩阵一定可以对角化 。以三维空间为例,正交矩阵就是歪着的立方体,对角化就是把这个立方体摆正(就是让它的某一个顶点放在原点上,同时这个顶点的三条边放在三条坐标轴上)。对角矩阵就是摆正后的立方体。 机器学习中的特征值分解, 往往是协方差矩阵,如PCA,所以我们要确保各个特征之间是线性无关的。 如何通俗地理解奇异值? 我们知道一个向量张成的空间是一条直线, 任意实数 可以得到非零向量 张成的空间是一条直线。那么如果一个 维空间中的向量 其所张成的空间——一条直线上的点,经过一个矩阵 变换到另一个 的空间中依然在同一条直线上,这个直线是 空间中的向量 所张成的空间,只是会有对应的缩放,这个缩放的程度就是奇异值。用数学形式表达为: , 是 空间中的向量, 是 的变换矩阵, 是 空间中的向量, 就是奇异值。 可以感觉到特征值是奇异值的特例,当m=n且 和 重叠的时候(方向可以不同),奇异值=特征值。 奇异值分解计算例子: https://www.cnblogs.com/marsggbo/p/10155801.html https://www.zhihu.com/question/22237507 https://blog.csdn.net/bitcarmanlee/article/details/52662518 https://blog.csdn.net/billbliss/article/details/78559289 SVD(奇异值分解)Python实现: https://www.cnblogs.com/endlesscoding/p/10058532.html 矩阵分解为了解决传统协同过滤处理稀疏共现矩阵能力差的问题。使用矩阵分解相比传统协同过滤也提升了泛化性。 基于矩阵分解的模型又叫潜在因素模型、隐语义模型。 矩阵分解的开端是2006年的Netflix竞赛。 1、推荐系统中: 分解的是什么矩阵?共现矩阵 怎么共现矩阵分解? 1)特征值分解 要求待分解的是方阵,所以行不通 2)奇异值分解 要求待分解矩阵是稠密矩阵,而共现矩阵是稀疏矩阵,所以不行; 奇异值分解的复杂度是 ,复杂度很高,也不合适。 3)梯度下降法——也就是交替最小二乘法(alternating least squares,ALS),解决两个变量求解。 使用梯度下降法进行矩阵分解 (1)确定目标函数: ,就是一个MSE; (2)分别对 和 求偏导 (3)参数更新 (4)迭代 得到隐向量后,对某个用户进行推荐时,利用该用户的隐向量与所有物品的隐向量进行逐一内积运算,得到该用户对所有物品的得分,再进行排序,得到最终的推荐列表。 4)贝叶斯矩阵分解 https://zhuanlan.zhihu.com/p/26067454 2、PCA---奇异值分解北营2023-05-22 22:49:311
矩阵分解算法
矩阵分解算法主要用于解决协同过滤算法泛化能力弱的问题。 在现实中人和商品可以进行分类,比如将人分为偏好刺激的、偏好自然的,将电影分为恐怖的、温馨的。当我们以这样信息对人和物进行标定后就可以根据他们直接的距离来判断他们的相似程度。 一般协同过滤的思路通过物品找到相似的人,在给用户1推荐和他相似的用户喜欢的物品。 对用户和物品在映射到低维度下计算他们之间的距离。 原有的 大小的共现矩阵 ,我们的目标是将它分解为 , 表示降维后的用户矩阵, 表示降维后的物品矩阵, 表示降温的程度一般 是远小于 。 如何进行矩阵分解?接下来介绍几种策略 在推荐模型中出现矩阵分解思路时自然想到了SVD(奇异值分解),SVD可以将一个矩阵 分解为 的形式,D中主对角线上是从到到小排序的奇异值,我们选择前几个奇异值和对应U和V的向量这样实现了降维。 降维后的 可以作为用户矩阵,降维后的 可以作为物品矩阵。接着使用 , 公式对所有的用户产品组合进行评分,这样我们就把原共现矩阵中用户没有评分的物品也打上分了,利用这些评分就可以完成推荐。 问题就这样完美解决了?并不是。 矩阵 要进行SVD分解它就不能存在空的数据,而我们待分解的矩阵由于用户操作的低频特点,肯定会有空的位置出现,并且如果已经有了一个填满数据的共现矩阵,那就不用进行分解直接用就可以了。针对空数据可以采用填0、填平均值等方式暴力补全数据,但是这样的操作会影响准确度而且对越稀疏的矩阵影响越大,同时存放一个暴力填满的矩阵要求更多的存储空间,还有SVD的时间复杂度 也很可观。 这个模型感觉和SVD关系不大了,他的目标是得到矩阵 和 ,这两个矩阵可以很好的反应已知的用户数据,根据以上目标构造待优化的目标函数这里 表示用户评分样本集合。为了避免过拟合引入正则项后目标函数变为接着利用梯度下降求解 和 。 Funk-SVD模式解决了SVD模型中空数据需要保留填写、SVD分解耗时、占用空间多的问题。同时考虑一些偏置。 用户偏置 :一些用户喜欢打高分、一些用户喜欢打低分 物品偏置 :一些电影普遍得分高 整体偏置 :数据整体的平均得分这样可以消除偏置,让预测更合理。 该模型依然存在利用信息有限的缺点。 深度学习推荐系统 王喆 推荐系统之矩阵分解家族 推荐系统实践 项亮北境漫步2023-05-22 22:49:311