推荐系统中的矩阵分解,假设推荐矩阵是两个低秩矩阵相乘,有何依据? 举报 理由 举报 取消 推荐系统里常用矩阵分解算法,它把latent factor看做两个低秩矩阵相乘。这本质上是假设lantent factor都是线性的。这个假设有什么概率上和现实意义上的依据?有没有可能latent factor是恰恰非线性的,导致推荐算法失效? 2017年11月23日 10 条回复 1455 次浏览 学习,推荐,数据挖掘,机器,算法,系统
回复 ( 10 )
MF的想法应该来自于 Matrix Completion (给定一个partially observed matrix,想要把missing的value给补全)。一般用的假设是这个original matrix是low rank的,observed values从这个matrix 里面sample出来的,我们可以从这些observed values来还原这个矩阵(当然是基于一些条件下才能exactly补全的)。由于直接求解这个low rank matrix从算法复杂度和以及参数的复杂度来说都不是很efficient,最常用的是一个non-convex的简化版,也就是直接把矩阵表示成两个submatrices相乘,直接去求解这两个submatrices,也就是题主提到的这个。后来很多工作在这之上加了很多别的扩展(比如Yehuda Koren的SVD++和temporal SVD),这些模型就不能直接用矩阵补全来解释了。这些工作一般都被统称为latent factor model,这些模型一般都算是linear model。
在有些情况下,可能linear model 会underfit data,所以考虑非线性会更好一些。这里推荐两篇不错的论文:
有其他的答案提到了AutoEncoder, 我们最近有一篇论文 做了些相关的preliminary work,欢迎拍砖。
谢邀。
建议题主描述要清晰。
题目中说”latent factor都是线性的”,虽然大致能理解你的意思,但是还是应该用数学符号表达出这里的线性是什么意思。
推荐系统利用两个low rank矩阵的乘积近似原数据矩阵,就是因为假设了原数据矩阵是low rank的。这个假设在实际中效果不错,但并不是唯一能用的假设,只是在各种paper和应用中比较常见而已。实际上不采用low rank假设,推荐系统依旧可以采用别的方法(对应了别的假设)做。无论采取什么样的方法做这种矩阵补全的任务,一定伴随着相应的假设,无假设也能对所有数据work的矩阵补全不存在。
回头再补充。
物以类聚,人以群分。
这里假设人群的偏好是低秩的有两层意义。
一. 人群的偏好是有着天然的分类的,这种天然的分类数量并不多。例如,政治倾向上总有左右;政党支持也就是驴象的四种排列组合;情侣们都要看爱情片;程序员离不开科幻等等。稀疏的几类人,在兴趣矩阵里面就是低秩的。
二. 不被低秩所覆盖的兴趣分类,对推荐系统也是没有意义的。以看电影为例。类型人看类型电影,是符合低秩假设的。不符合低秩假设的有两种,非典型本类人就是喜欢某些异类电影;或者是看错电影了(outlier)。这两类中的前者是个体差异难以为推荐系统提供价值;后者完全就是噪声数据,正是推荐系统所要清洗掉的。
没啥依据,就是因为好算。推荐系统都是大数据量大矩阵分解。
不过anyway,线性模型可以一阶近似任何可导函数。如果你要理论依据,这就是算是吧。
矩阵分解这个名字太局限了。我更愿意称之为“user/item embedding”(类比word embedding)。采取这种观点,我们很容易就能得到更一般的模型:
MF(矩阵分解)无非就是把
取成了欧几里德内积,
取成了“字典”。如果你要把
换成别的函数自然是没有问题的,带参数的也可以(很有可能还更好)。但是,欧几里德内积下可以用
维实现对
维的光滑的
函数的
阶近似,而且欧几里德内积本身也比较符合实际。MF更大的问题来自于
的选择,“字典”会对数据少的user/item过拟合。
这个假设其实来源于这么一个理念:用户数量千千万,但是一共就那么几类,比如码畜,比如宅女,比如白富美,存在很多相似的量。
不光是这个假设,还有一个假设是,特征方向的数量比类别还少,比如家境还不错的腐女是一类,可以由“家境好”这个特征和“腐女”这个特征线性组合。
也就是说,矩阵很大,但是秩很低。
我们只要找出其中的特征人物和特征商品就可以基本完整的描述整个矩阵。
建议看一下Neural network里面对于Autoencoder的解释,首先说Autoencoder是一个三层网络,其结构为input layer — hidden layer — output layer,其中input layer — hidden layer 是encoder,从hidden layer — output layer是decoder,其实可以看做对input的重构,其目标函数是argmin(input-output)^2,(当然这只是其中一种优化目标函数,还有其他的,比如KL散度),如果三层网络中的变换是线性的,则可以看做是PCA,(我觉得也可以做其他的线性变换,如SVD),当其中的变换是非线性的,那么就可以看做是题主说的latent factor的非线性变换。
Autoencoder应用于推荐系统,是将user-item 的评分作为输入层,latent features可以看做是Autoencoder的hidden layer,输出的话,仍然是评分,优化目标可以是(output-input)^2,对评分矩阵进行重构,已经有文章,去做这个了,还有Stacked Autoencoder,来进行的,原理类似。
给一个介绍Autoencoder的链接吧,Denoising Autoencoders (dA),感兴趣的话,可以看看。
傅里叶变换认为图像是无数个波组成的,有什么依据?
对于数学工具来说,数学上可行,能工作就是最大的依据,傅里叶变换后在频域可以方便的对图片做处理;矩阵分解可以方便的针对分解后的矩阵做处理;只要数学上能这么干,最终推荐的目的达到了,数据提升了,就是最大的依据。
如果说发明算法的人为什么会想到这么干,无非是拍脑袋提假设的直觉和强大的验证能力。可能还有许多别的没什么依据的想法,最后数据不好,发不出paper,大家也都不知道了。
最近正在做电商这块mf, 来做相似品 用的就是mf 挺靠谱的 数学上的不是很了解
没有什么依据,一个现实问题要转化为可以解决的数学问题,总要有点假设。如果没有很好的理论,那就只能大胆假设。
这玩意儿不严谨谁都看得出来,不过中国有句古话,我不说大家也知道是那句,所以有点结果然后去Amazon之类的企业几百万几百万地圈钱总比拘泥于没有完美的理论要好哇。