首页

> 学术发表知识库

首页 学术发表知识库 问题

矩阵的三角分解毕业论文

发布时间:

矩阵的三角分解毕业论文

三角分解法是将原正方 (square) 矩阵分解成一个上三角形矩阵或是排列(permuted) 的上三角形矩阵和一个 下三角形矩阵,这样的分解法又称为LU分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程,求逆矩阵,和求解联立方程组。不过要注意这种分解法所得到的上下三角形矩阵并非唯一,还可找到数个不同 的一对上下三角形矩阵,此两三角形矩阵相乘也会得到原矩阵。MATLAB以lu函数来执行lu分解法, 其语法为[L,U]=lu(A)。

矩阵的分解是矩阵相关运算中的重要内容,MATLAB提供了用于矩阵分解运算的多种函数。本节将集中介绍MATLAB所提供的矩阵分解运算函数的功能及使用。

矩阵的三角分解又称高斯消去法分解,它的目的是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。MATLAB提供了专门的函数lu来计算矩阵的LU分解。该函数的调用格式如下:

其中,返回矩阵U为上三角阵,矩阵L为下三角阵或其变换形式,且满足LU=X。返回矩阵P为单位矩阵的行变换矩阵,满足LU=PX。

奇异值分解在矩阵分析中占有极其重要的作用。MATLAB提供了用于矩阵奇异值分解的函数svd,该函数是利用LINPACK程序库中的ZSVDC编制而成的。在计算的过程中假如经过75步QR分解仍得不到一个奇异值,那么系统会给出“不收敛”的提示。奇异值分解函数svd的几种调用格式如下:

其中,命令①返回向量s包含矩阵X分解所得到的全部奇异值向量。命令② 返回一个与X同大小的对角矩阵S和两个酉矩阵U与V,且满足= U S V'。命令③ 得到一个“有效大小”的分解,如果m×n维矩阵X中m>n则只计算出矩阵U的前n列,矩阵S的大小为n×n。

MATLAB提供了eig函数来对矩阵进行特征值分解,该函数的几种调用格式如下:

其中,①计算矩阵A的特征值d,返回结果以向量形式存放。②计算方阵A和B的广义特征值d,返回结果以向量形式存放。③计算矩阵A的特征值对角阵D和特征向量阵V,使AV=VD成立。④计算矩阵A的特征值对角阵D和特征向量阵V,使AV=VD成立。当矩阵A中有与截断误差数量级相差不远的值时,该指令可能更精确。'nobalance'起误差调节作用。⑤计算矩阵A和B的广义特征值向量阵V和广义特征值阵D,满足AV=BVD。最后一条命令⑥由flag指定算法计算矩阵A和B的特征值D和特征向量V。其中,flag的可能值为:'chol' 和'qz' 。当flag值为'chol'时表示对B使用Cholesky分解算法,其中A为对称Hermitian矩阵,B为正定阵。当flag值为'qz'时表示使用QZ算法,其中A、B为非对称或非Hermitian矩阵。

MATLAB提供了chol函数来对矩阵进行Cholesky分解,该函数的调用格式为:

函数调用格式①如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。②不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。

正交矩阵是指矩阵的列向量相互正交,且各个列向量的长度相等。QR分解就是将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。MATLAB提供了用于矩阵QR分解的函数,表3.7中介绍用于矩阵QR分解的函数调用格式和功能。 表3.7 矩阵QR分解

Schur分解将使用schur函数,该函数的调用格式为:

命令行①-③返回正交矩阵U和schur矩阵T,满足A = U T U'。其中,若A有复特征根,则flag='complex',否则flag='real'。

即使是实阵,在其特征值中也可能出现复数。实际使用中常需要把这一对对共轭复数特征值转化为一个(2x2)的实数块。函数调用格式为:

MATLAB提供了gsvd函数对矩阵进行广义奇异值分解,其具体调用格式为:

其中,函数调用格式①返回酉矩阵U和V、一个普通方阵X、非负对角矩阵C和S,满足A = U C X',B = V S X',C' C + S' S = I (I为单位矩阵)。A和B的列数必须相同,行数可以不同。函数调用格式②和①基本相同,而③则返回广义奇异值sigma值。

MATLAB提供了qz函数对矩阵进行特征值问题的QZ分解,该函数的调用格式为:

其中函数调用格式①中A、B为方阵,返回结果AA和BB为上三角阵,Q、Z为正交矩阵或其列变换形式,V为特征向量阵,且满足Q A Z= AA 和Q B Z = BB。命令行②产生由flag决定的分解结果,flag取值为'complex'表示复数分解(默认);取值为'real'表示实数分解。

如果矩阵H的第一子对角线下元素都是0,则H为海森伯格(Hessenberg)矩阵。如果矩阵是对称矩阵,则它的海森伯格形式是对角三角阵。MATLAB可以通过相似变换将矩阵变换成这种形式,具体调用格式为:

论文?呵呵你开玩笑吧。一篇论文一百来页就30分,你给我500我都不一定给你,你太2了,没写过论文吧你。。

矩阵的分解毕业论文下载

百度文库有篇很好的,直接搜“毕业论文分块矩阵的应用”就行了。

《矩阵分析史荣昌第二版》百度网盘pdf最新全集下载:链接:

矩阵的分解及应用毕业论文

随机环境中经济增长模型研究广义生产函数假设下的经济增长模型分析考虑市场预期的供求关系模型基于Matlab的离散事件模拟用风险预算进行资产配置有向图上的PAR贯序模拟系统单圈图的一般Randic指标的极值问题模糊数学在公平评奖问题中的应用模糊矩阵在环境评估中的初步应用模糊评判在电脑中的初步应用数学家的数学思想Riemann积分定义的网收敛表述微积分思想在不等式证明中的应用用有限的尺度标量无限的过程-略论极限ε语言在微积分及现代数学中的位置及意义微积分思想在几何问题中的应用齐次平衡法求KdV-Burgers方程的Backlund变换Painleve分析法判定MKdV-Burgers方程的可积性直接法求KdV-Burgers方程的对称及精确解行波求解KdV-Burgers方程因子有向图的矩阵刻划简单图上的lit-only sigma-game半正则图及其线图的特征多项式与谱分数有向图的代数表示WWW网络的拓扑分析作者合作网络等的拓扑分析古诺模型价格歧视用数学软件做计算微分方程的计算器用数学软件做矩阵计算的计算器弹簧-质点系统的反问题用线性代数理论做隐含语义搜索对矩阵若当标准型理论中变换阵求法的探讨对矩阵分解理论的探讨对矩阵不等式理论的探讨(1)对矩阵不等式理论的探讨(2)函数连续性概念及其在现代数学理论中的延伸从有限维空间到无限维空间Banach空间中脉冲泛函微分方程解的存在性高阶脉冲微分方程的振动性具有积分边界条件的分数阶微分方程解的存在唯一性分数阶微分方程的正则摄动一个形态形成模型的摄动解一个免疫系统常微分方程模型的渐近解前列腺肿瘤连续性激素抑制治疗的数学模型前列腺肿瘤间歇性激素抑制治疗的数学模型病毒动力学数学模型肿瘤浸润数学模型耗散热方程初边值问题解的正则性耗散波方程初边值问题解的正则性耗散Schrodinger方程初边值问题解的正则性非线性发展方程解得稳定性消费需求的鲁棒调节生产函数的计量分析企业的成本形态分析的研究分数阶Logistic方程的数值计算分数阶捕食与被捕食模型的数值计算AIDS传播模型的全局性分析HIV感染模型的全局性分析风险度量方法的比较及其应用具有区间值损益的未定权益定价分析模糊规划及其在金融分析中的应用长依赖型金融市场股票价格与长相依性分数布朗运动下的外汇期权定价不确定性与资产定价加油站点的分布与出租车行业的关系

告诉你拟就会写吗。不如我给你写得了

好写哦!科技论文,专业性这么强,写出来,也是只有专业人员才能明白。首先,序言:把矩阵的乘法原理,加以介绍、解释和说明,这些就是书上现成的东西。接着介绍其应用都有哪些,具体在哪些方面。最后说明本文主要介绍哪些方面的具体应用及事例。进入正文,集中写清楚,你要介绍的应用及事例。字数要多,就多写,写详细一些;字数一般,就写得一般,就可以啦。。。祝成功!

矩阵的分解及其应用毕业论文

------------------------------------------------------------------------------------------------------------------------------------------------

对于推荐系统来说存在两大场景即评分预测(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

比较复杂,可参考这篇 文章

参考文章:

百度文库有篇很好的,直接搜“毕业论文分块矩阵的应用”就行了。

好写哦!科技论文,专业性这么强,写出来,也是只有专业人员才能明白。首先,序言:把矩阵的乘法原理,加以介绍、解释和说明,这些就是书上现成的东西。接着介绍其应用都有哪些,具体在哪些方面。最后说明本文主要介绍哪些方面的具体应用及事例。进入正文,集中写清楚,你要介绍的应用及事例。字数要多,就多写,写详细一些;字数一般,就写得一般,就可以啦。。。祝成功!

矩阵分解及其应用毕业论文

告诉你拟就会写吗。不如我给你写得了

在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合[1] ,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵和准对角矩阵,有特定的快速运算算法。关于矩阵相关理论的发展和应用,请参考矩阵理论。在天体物理、量子力学等领域,也会出现无穷维的矩阵,是矩阵的一种推广。矩阵的研究历史悠久,拉丁方阵和幻方在史前年代已有人研究。作为解决线性方程的工具,矩阵也有不短的历史。成书最迟在东汉前期的《九章算术》中,用分离系数法表示线性方程组,得到了其增广矩阵。在消元过程中,使用的把某行乘以某一非零实数、从某行中减去另一行等运算技巧,相当于矩阵的初等变换。但那时并没有现今理解的矩阵概念,虽然它与现有的矩阵形式上相同,但在当时只是作为线性方程组的标准表示与处理方式。矩阵正式作为数学中的研究对象出现,则是在行列式的研究发展起来后。逻辑上,矩阵的概念先于行列式,但在实际的历史上则恰好相反。日本数学家关孝和(1683年)与微积分的发现者之一戈特弗里德·威廉·莱布尼茨(1693年)近乎同时地独立建立了行列式论。其后行列式作为解线性方程组的工具逐步发展。1750年,加布里尔·克拉默发现了克莱姆法则[2] 。矩阵的现代概念在19世纪逐渐形成。1800年代,高斯和威廉·若尔当建立了高斯—若尔当消去法。1844年,德国数学家费迪南·艾森斯坦(F.Eisenstein)讨论了“变换”(矩阵)及其乘积。1850年,英国数学家詹姆斯·约瑟夫·西尔维斯特(James Joseph Sylvester)首先使用矩阵一词[3] 。英国数学家凯利被公认为矩阵论的奠基人。他开始将矩阵作为独立的数学对象研究时,许多与矩阵有关的性质已经在行列式的研究中被发现了,这也使得凯利认为矩阵的引进是十分自然的。他说:“我决然不是通过四元数而获得矩阵概念的;它或是直接从行列式的概念而来,或是作为一个表达线性方程组的方便方法而来的。”他从1858年开始,发表了《矩阵论的研究报告》等一系列关于矩阵的专门论文,研究了矩阵的运算律、矩阵的逆以及转置和特征多项式方程。凯利还提出了凯莱-哈密尔顿定理,并验证了3×3矩阵的情况,又说进一步的证明是不必要的。哈密尔顿证明了4×4矩阵的情况,而一般情况下的证明是德国数学家弗罗贝尼乌斯(F.G.Frohenius)于1898年给出的[2] 。1854年时法国数学家埃尔米特(C.Hermite)使用了“正交矩阵”这一术语,但他的正式定义直到1878年才由费罗贝尼乌斯发表。1879年,费罗贝尼乌斯引入矩阵秩的概念。至此,矩阵的体系基本上建立起来了。无限维矩阵的研究始于1884年。庞加莱在两篇不严谨地使用了无限维矩阵和行列式理论的文章后开始了对这一方面的专门研究。1906年,希尔伯特引入无限二次型(相当于无限维矩阵)对积分方程进行研究,极大地促进了无限维矩阵的研究。在此基础上,施密茨、赫林格和特普利茨发展出算子理论,而无限维矩阵成为了研究函数空间算子的有力工具[4] 。

------------------------------------------------------------------------------------------------------------------------------------------------

对于推荐系统来说存在两大场景即评分预测(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

比较复杂,可参考这篇 文章

参考文章:

相关百科

热门百科

首页
发表服务