矩阵分解

基于矩阵分解的推荐算法,简单入门

假装没事ソ 提交于 2020-01-25 10:14:15
基于矩阵分解的推荐算法,简单入门 转自:http://www.cnblogs.com/kobedeshow/p/3651833.html 本文将要讨论基于矩阵分解的推荐算法,这一类型的算法通常会有很高的预测精度,也活跃于各大推荐系统竞赛上面,前段时间的百度电影推荐最终结果的前10名貌似都是把矩阵分解作为一个单模型,最后各种ensemble,不知道正在进行的阿里推荐比赛( http://102.alibaba.com/competition/addDiscovery/index.htm ),会不会惊喜出现。。。。好了,闲话不扯了,本文打算写一篇该类型推荐算法的入门篇 目录 一,基于矩阵分解的推荐算法相关理论介绍 二,C++代码实现 三,总结跟展望一下 四,后续计划 一,基于矩阵分解的推荐算法相关理论介绍 我们知道,要做推荐系统,最基本的一个数据就是,用户-物品的评分矩阵,如下图1所示 图1 矩阵中,描述了5个用户(U1,U2,U3,U4 ,U5)对4个物品(D1,D2,D3,D4)的评分(1-5分),- 表示没有评分,现在目的是把没有评分的 给预测出来,然后按预测的分数高低,给用户进行推荐。 如何预测缺失的评分呢?对于缺失的评分,可以转化为基于机器学习的回归问题,也就是连续值的预测,对于矩阵分解有如下式子,R是类似图1的评分矩阵,假设N*M维(N表示行数,M表示列数)

转推荐算法——基于矩阵分解的推荐算法

北战南征 提交于 2020-01-25 10:13:39
推荐算法概述 对于推荐系统(Recommend System, RS),从广义上的理解为:为用户(User)推荐相关的商品(Items)。常用的推荐算法主要有: 基于内容的推荐(Content-Based Recommendation) 协同过滤的推荐(Collaborative Filtering Recommendation) 基于关联规则的推荐(Association Rule-Based Recommendation) 基于效用的推荐(Utility-Based Recommendation) 基于知识的推荐(Knowledge-Based Recommendation) 组合推荐(Hybrid Recommendation) 在推荐系统中,最重要的数据是用户对商品的打分数据,数据形式如下所示: 其中, U 1 ⋯ U 5 表示的是 5 个不同的用户, D 1 ⋯ D 4 表示的是 4 个不同的商品,这样便构成了用户-商品矩阵,在该矩阵中,有用户对每一件商品的打分,其中“-”表示的是用户未对该商品进行打分。 在推荐系统中有一类问题是对未打分的商品进行评分的预测。 目前推荐系统中用的最多的就是矩阵分解方法,在Netflix Prize推荐系统大赛中取得突出效果。以用户-项目评分矩阵为例,矩阵分解就是预测出评分矩阵中的缺失值,然后根据预测值以某种方式向用户推荐

GCN & NE

牧云@^-^@ 提交于 2020-01-25 07:55:05
GCN & NE 学科前沿课程任务 前言 在深度学习中,CNN、RNN是我们非常熟悉的面孔,他们在计算机视觉、自然语言处理等领域有着十分出色的表现。但是CNN处理的对象是二维图片,RNN处理的对象是一维序列,(欧氏空间,都是结构规则的数据)。对于社交网络、生物网络等图结构数据(结构十分不规则,没有平移不变性),CNN、RNN就无法处理了。 于是为了处理图结构数据就涌现出一批方法,如GNN、DeepWalk、node2vec等等。其中GNN中的代表是GCN,DeepWalk和Node2Vec属于Network Embedding。下面分别介绍GCN和Network Embedding及两者之间的相同与区别。 GCN介绍 GCN首次提出于ICLR2017 SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS 优点:使用切比雪夫多项式的1阶近似高效完成了图卷积架构 缺点:卷积需使用整个图的拉普拉斯矩阵,图不能扩展 GCN用来提取图结构数据的特征,从而使用这些特征去对图数据进行节点分类(node classification)、图分类(graph classification)、边预测(连接预测)(link prediction),还可以得到图的嵌入表示(graph embedding)。 图1 Multi

如何从科学论文中实现一个算法

空扰寡人 提交于 2020-01-25 01:04:43
原文: http://codecapsule.com/2012/01/18/how-to-implement-a-paper/ 作者:Emmanuel Goossaert 本文是从科学论文中实现算法的简短指南。我从书籍和科学出版物中实现了许多复杂的算法,本文总结了我在搜索,阅读,编码和调试方面所学到的知识。这显然仅限于与计算机科学领域有关的领域的出版物。然而,您应该能够将以下提供的指导方针和良好做法应用于任何类型的文件或实施。 1 - 在你进入之前 在您阅读技术论文并实施之前,您应该查看几点。每当你准备开始这样一个项目时,请确保你仔细地盖住他们。 1.1 - 找到一个开源实现,以避免编码 除非你想为了更多地了解这个领域来执行论文,否则你无需实现。事实上,你想要的不是对纸张进行编码,而只是实现纸张的代码。所以在你开始任何事情之前,你应该花几天的时间试图在互联网上找到一个开源的实现。只要考虑一下:你宁愿失去两天的时间寻找代码,还是浪费两个月来实现一个已经可用的算法? 1.2 - 找到更简单的方法来实现你的目标 问问自己想要做什么,如果更简单的解决方案可以满足您的需要。您可以使用其他技术 -即使结果只有您想要的80% -不需要实现该文档,并且您可以在随后的两天内运行可用的开源库?有关更多信息,请参阅我的文章 20/80生产力规则 。 1.3 - 小心软件专利 如果您在美国,请注意软件专利

矩阵分解推荐算法(LMF)

自古美人都是妖i 提交于 2020-01-24 16:43:14
首先我们现在有一个矩阵 \(R_{mn}\) ,其中 \(R_{ij}\) 代表第 \(i\) 个用户对第 \(j\) 个商品的喜爱程度。 \(LMF\) 算法认为每个商品上面都有一些隐因子,而顾客的喜爱程度是由这些隐因子来决定的。因此便可以将 \(R_{mn}\) 分解成 \(P_{mF} \times Q_{Fn}\) 的形式。 矩阵 \(P_{mF}\) 代表了这 \(m\) 个用户对 \(F\) 个隐因子的喜爱程度, \(Q_{Fn}\) 代表这 \(F\) 个隐因子在这 \(n\) 个商品上的分布概率。 \[R'_{ij}=\sum_{f=1}^F {P_{if}Q_{fj}}\] 我们最终的目的是使得 \(R_{ij}\) 和 \(R'_ {ij}\) 尽可能的相近。因此,损失函数为: \[f(P,Q)=\sum{(R_{ij}-R'_{ij})^2}\] 为了防止过拟合,需要加上一个正则项来防止 \(P_{if},Q_{fj}\) 过小或过大。 \[f(P,Q)=\sum{(R_{ij}-R'_{ij})^2}+\lambda(\sum{(P_{if}^2}+\sum{Q_{fj}^2})\] 接下来就是对这个函数用梯度下降进行拟合,递推式为: \[P_{k+1}=P_{k}-\alpha\frac{\partial f(P,Q)}{\partial P_k}\] \

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

纵饮孤独 提交于 2020-01-22 21:43:59
  为了方便介绍,假设推荐系统中有用户集合有6个用户,即U={u1,u2,u3,u4,u5,u6},项目(物品)集合有7个项目,即V={v1,v2,v3,v4,v5,v6,v7},用户对项目的评分结合为R,用户对项目的评分范围是[0, 5]。R具体表示如下: 推荐系统的目标就是预测出符号“?”对应位置的分值。推荐系统基于这样一个假设:用户对项目的打分越高,表明用户越喜欢。因此,预测出用户对未评分项目的评分后,根据分值大小排序,把分值高的项目推荐给用户。怎么预测这些评分呢,方法大体上可以分为基于内容的推荐、协同过滤推荐和混合推荐三类,协同过滤算法进一步划分又可分为基于基于内存的推荐(memory-based)和基于模型的推荐(model-based),本文介绍的矩阵分解算法属于基于模型的推荐。 矩阵分解算法的数学理论基础是矩阵的行列变换。在《线性代数》中,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。 矩阵分解目标就是把用户-项目评分矩阵R分解成用户因子矩阵和项目因子矩阵乘的形式,即R=UV,这里R是n×m, n =6, m =7,U是n×k,V是k×m。直观地表示如下: 高维的用户-项目评分矩阵分解成为两个低维的用户因子矩阵和项目因子矩阵,因此矩阵分解和PCA不同,不是为了降维

VINS-mono详细解读

本小妞迷上赌 提交于 2020-01-20 03:58:54
VINS-mono详细解读 极品巧克力 前言 Vins-mono是香港科技大学开源的一个VIO算法, https://github.com/HKUST-Aerial-Robotics/VINS-Mono ,是用紧耦合方法实现的,通过单目+IMU恢复出尺度,效果非常棒。 感谢他们开源,我从中学到了非常多的知识。源码总共有15000多行,我在通读完程序之后,结合参考文献,把程序背后的算法理论都推导了一遍,总结成了本文,与各位分享。 本文目标读者:对vins-mono有一定了解的SLAM算法工程师。由于程序里有非常多的实现细节,建议读者在读本文前,先读一遍vins-mono的程序。 1.特征点跟踪 首先用 cv::goodFeaturesToTrack 在第一帧图像上面找最强的150个特征点,非极大值抑制半径为30。新的特征点都有自己的新的对应的id。然后在下一帧过来时,对这些特征点用光流法进行跟踪,在下一帧上找匹配点。然后对前后帧中这些匹配点进行校正。先对特征点进行畸变校正,再投影到以原点为球心,半径为1的球面上,再延伸到深度归一化平面上,获得最终校正后的位置。对于每对匹配点,基于校正后的位置,用F矩阵加ransac来筛选。然后再在匹配上的特征点之外的区域,用 cv::goodFeaturesToTrack 搜索最强的新的特征点,把特征点数量补上150个。 最后,把剩下的这些特征点

数学基础系列(六)----特征值分解和奇异值分解(SVD)

て烟熏妆下的殇ゞ 提交于 2020-01-19 19:31:11
一、介绍   特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。   奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。   在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic Indexing)   特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,接下来会谈到特征值分解和奇异值分解的目的都是一样,就是 提取出一个矩阵最重要的特征 。   首先来看看向量的表示及基变换   向量可以表示为(3,2),实际上表示线性组合:$x(1,0)^{T}+y(0,1)^{T}$      基:(1,0)和(0,1

模式识别系列之特征降维(1)主成分分析

半城伤御伤魂 提交于 2020-01-19 11:54:20
目录 1-PCA概述 2-理论推导 2.1-向量的内积与投影: 2.2-基的表示与变换: 2.3-协方差矩阵: 2.4-PCA推导 3-几何理解 4-计算过程 4.1-样本数小于特征数时的计算 4.2-matlab代码 5-实例 参考 1-PCA概述 主成分分析是一种常用的降维方法,它不使用标签信息,通过将原始坐标空间的数据( d × 1 d\times 1 d × 1 )投影到新的正交空间( k × 1 k\times 1 k × 1 )中实现数据降维,所谓的主成分就是指数据在新空间的基的方向。PCA以方差作为信息损失衡量的标准,使得数据降维过程中信息损失最小,即降维后数据的方差要尽量大。PCA首先找到所有数据方差最大的方向,并将其作为新的坐标空间的第一个轴的方向,然后在这个方向的垂直超平面上寻找第二个方差最大的方向,并作为新坐标空间第二个轴的方向,以此类推,直到找到需要的k个方向,也就是K个主成分,显然这k个新的基方向是两两垂直的。PCA的主要过程可以用“扭动坐标轴,保留K个轴”来形容。 为什么要以方差最大为依据呢?降维是为了数据更好地表示与计算,显然我们不希望降维后的数据成了一坨,使得原本分界明显的数据掺和在一起。例如,将数据投影到一维坐标系中,显然绿色的投影更好一些,因为其分散程度大,也就是方差更大。 对n个d维数据构成的数据集 X X X ( d × n d\times

奇异值分解简要笔记

て烟熏妆下的殇ゞ 提交于 2020-01-18 19:35:43
特征值分解 特征值分解可以看作是换基,线性变换在新基下表现为仅仅是对各个坐标轴做伸缩,然后再换回原来的基。 对称矩阵的特征值分解有更好的性质,它可以保证新基是标准正交基。 对称矩阵 正交对角化 对称矩阵有非常好的性质——可以正交对角化。 就是说对称矩阵A可以用特征值和特征向量分解成 A = P D P T A=PDP^T A = P D P T 的形式。 其中D是对角矩阵,对角线上是A的特征值。P的列向量是A的标准正交基。 这个形式很好,P是正交矩阵,对应是正交变换。正交变换保留了内积,所以也就保留了角度和距离。这在分类和聚类里面都是很重要的,因为衡量两个向量相似度就是用角度或者距离。 正交变换从几何上看就是旋转(或者旋转加镜面反转)。 谱分解 P的列是一组标准正交基: P = [ u 1 , ⋯   , u n ] P = [\mathbf{u}_1, \cdots , \mathbf{u}_n] P = [ u 1 ​ , ⋯ , u n ​ ] 那么A可以分解成n个矩阵的和: A = λ 1 u 1 u 1 T + λ 2 u 2 u 2 T + ⋯ + λ n u n u n T A=\lambda_1 \mathbf{u}_1 \mathbf{u}_1^T + \lambda_2 \mathbf{u}_2 \mathbf{u}_2^T + \cdots + \lambda