推荐算法
1、 基于内容的推荐
2、 基于近邻的推荐(协同过滤)
3、 基于矩阵分解的隐语义模型(LFM,FM,FFM)
4、 word2vec在推荐中的应用
基于内容的推荐
常用于和文本有关的推荐。比如新闻推荐,电影推荐。
具体做法
对用户来说,他看过哪些新闻,电影,这些新闻电影会有一些关键词。用这些关键词可以构建一个向量描述这个用户。Wij代表第i个词对用户j的重要度。
对新闻、电影来说,也是有一些关键字,或用tfidf去统计。总之也是得到个向量。
然后就可以用相似度了。比如夹角余弦。
在聚类中我们说余弦值不容易收敛,那是因为聚类是要做多次迭代的,我们这里没有迭代所以可放心使用。
而具体做法可以把每个文档向量化,比如tfidt,向量维度是一个个单词,值是单词的tfidf值。
对于用户,可以把它过去看过的那些文档拿过来(可以有时间衰减),综合出一个向量代表这个人。
基于近邻的算法
knn,ann,协同过滤,都是基于近邻的一种,协同过滤是其中最有名的。
协同过滤算法是基于 物品——用户 矩阵工作的。行是物品,列是用户。每个元素是用户对物品的打分。
定义物品间相似度时,最简单直接的方法使用用户交集。jaccard相似度就可以干这个。
基于物品的协同是怎么做的呢,对用户A推存电影,脑补下面过程:
共6部电影,他看了4部,剩下2部没看——我们要做的就是根据他对另4个电影的评分,估计出他会对这2个的打分。是体做法
对电影1
计算那4部电影和它的相似度,用皮尔森相似度。
每一行是一个电影的所有用户评分,把这一行中心化。(在行的级别做中心化)
这4+A都做了中心化后,计算相似度,有了4个数字。假设我们是按照top 2 的规则来做推荐,也就是根据两个最接近的物品做推荐。所以,从这四个相似度中,选择最大的两个。
把这2个相似度做权值,用户A对这2个电影的评分做加权平均得到估计的评分。
其它个电影都这么做一遍,得到2个估计评分,排序后推荐。
计算中注意细节
用户没评分的电影不参与相似度的计算。也就是不参的最后的加权平均
估计出来评分也不参与后续估分什算。因为本来就是估计的。
优点
无需任何先验知识,结构简单
缺点
不考虑环境上下文
没有包含物品相似信息:由于完全基于用户行为计算的物品相以度。假设两个商家的两个完全一样的物品,除非有相同的用户行为,否则是得不到相似的。解决办法,引入基于内容的推荐,多个推荐组。再学习排序。
隐语义模型(LFM)
http://www.cnblogs.com/hxsyl/p/4881685.html
用矩阵分解的思想去完成矩阵填空。但不能甲svd去做,原因有2
1、 时间复杂度是立方级别的
2、 矩阵中是有很多缺失值的,不能用0简单填充。所以用的是建立方程组的方式,定义损失丞数,梯度下降。加上正则项,并约定都是正数,非负矩阵分解。
netflix的进一步优化,加上了物品偏置项,用户偏置项,平均偏执项(时间因素),这么三个偏置项。其思想和线性回归中的加上偏置项,避免所有回归线都只能通过原点一样。
所以最后的数学模型多了三项。总之就是引入了更多能体现个性化的项。比如有的人就是偏激,就是打分低,有的就是慷慨,一律高分。有的电影就是垃圾,有的就是精品。群体在不同时段平均表现就不一样,比如双11全民疯狂。这就是三个偏置项的作用。
见netflix的效果对比。
wordtovec在推荐中的巧妙应用
可看作是基于上下文推荐
覆盖率比协同过滤高,即召回更多商品
把用户行为序列当做一个个单词去学习。
wtv是基于窗口学习的,它能学到男-女=国王-女王,能学到中国=美国,北京=纽约这样的知识。
这是一个典型的跨界巧妙应用。