协同过滤
协同过滤分为memory based和model based。user cf 和 item cf 都是基于此的
user cf
列是user,行是item。目的是计算用户之间的相似度,来填补图中item5的评分。
找相似
用皮尔逊相关系数,cosine等来计算相似度。
计算物品评分,并排序。
公式如下。
$$p(u,i) = \overline{r_u} + \frac{\sum_{v \in N} sim(u,v) \times (r_{v,i} - \overline{r_v})}{\sum_{v \in N}sim(u,v)}$$
这里p(u,i) 代表用户u,对物品i的评分。sim(u,v)代表用户u,v相似度。
$r_{v,i}$代表用户v对物品i的打分。 $\overline{r_v}$代表了
这样我们就可以计算出小明对其他物品的打分预测值(这里每次计算都需要用户之间的相似度,所以可以缓存起来)。
推荐方法分为两种。一种是top-n推荐,一种是关键推荐。top-n推荐的意思就是统计在前k个用户中,统计出现频率最高且在目标用户中没有出现过的。关联规则,就是在这前k个用户中,挖掘关联规则,类似于‘买了xx的用户还买了哪些’
基于物品的协同
1.相似度
行是物品,列是user。
首先找到最相似的物品。
2.计算用户对所有物品的评分。
根据最相似的物品的评分来计算未被评分的物品。
$$\frac{\sum_{j \in rel(u)}sim(j,i)\times r_{u,j}}{\sum_{j \in rel(u)}sim(j,i)}$$
表达出来就是相似度* 评分。
二者优缺点。
首先二者都是稀疏矩阵,为了减少计算量,可以预先聚类一下。
场景: user-based. 按理说更适合新闻这种,item量远大于用户的。对于我们来说,因为我们是取1周内的文章,所以相对来说,item 量没有过大的扩展。item-based更适合item量较小的。
性能及复杂度: user-based 的缺点也比较明显。相似用户的稳定度要小于物品的稳定度程度,所以需要在线更新。 而item-based离线计算就能够获得比较好的复杂度。
推荐多样性和精度: 从单一用户角度,肯定是user-based 更加多样,但同时也更加容易推荐比较热的东西。item-based,是根据用户的历史记录来推荐,所以相对来说,更容易拟合。item-based, 对于新用户(读取量下于10的时候的推荐效果更好。)。 item-based ,更容易发现长尾数据,因为只要有一些用户买了这个长尾的物品,那么这两个物品就有很高的相关性).
稀疏性: 从稳定性上讲,user-based,item-based 对于新闻应用,固定item的情况下,相似度的稳定性上,item-based 更好一些。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。