想学习推荐系统,如何从小白成为高手(https://www.zhihu.com/question/23194692)里有一个回答说:
“关于推荐系统,如果忘掉所有的公式和代码,忘记所有的语言描述,脑海里就剩下几张图景,会是什么?
一张二维表格,一个拓扑图,一条时间线。
这三幅图景,是我看待推荐算法的三种视角,分享给大家便于理解。”
这其中的表格就是基于用户对商品评分的表格。
正好前面有写过协同过滤和SVD一些算法,就能都串起来了:
协同过滤算法主要分为两类,一类是基于邻域的方法(neighborhood methods),另一类是隐语义模型(latent factor models)。
基于邻域的方法就是协同过滤里最经典的user-based和item-based:见前面的 https://www.jianshu.com/p/23f03233e26c
基于隐语义模型的就是SVD的众多方法:
SVD:需要填充到一个较为稠密的矩阵,然后奇异值分解,再取较大的k个奇异值对应的m*k k*k k*n的三个矩阵,有点感觉不出这个的意义在哪,明明已经用均值填充到稠密了,然后再基于这个填充的矩阵做SVD,弄一个近似出来
FunkSVD(又称Latent Factor Model):找到合适的矩阵分解来最小化训练集的误差,可以加上正则避免过拟合太严重,从此MF开始大放异彩
BiasSVD:每个分数可能有来自整体的bias,有来自用户的bias,有来自商品本身的bias,把这些bias拿出来,剩下的分数再用矩阵分解的方式建模
SVD++(结合邻域和BiasSVD):这里大概的思想是把每个分数里可能来自领域的再拿出来,并且也做矩阵分解,但是怎么分的我还没弄太明白
加入时间信息的SVD:比如BiasSVD,就把每个值都看做时间的函数,随时间衰减。