![4112c9cf1d9923dc39c842813dc9c27f.png](https://i-blog.csdnimg.cn/blog_migrate/62fba44491d6ca208ed458a113ae45d5.jpeg)
Surpise包之协同过滤
一. CoClustering
这是一个基于聚类的协同过滤算法,该算法是根据文献【1】来实现的。该算法的主要思想是分别将user和item进行分类(类似分桶),然后根据类中心来进行预测。其预测函数如下:
![9b622446628963e3d0b258a681043520.png](https://i-blog.csdnimg.cn/blog_migrate/aa75c9ded2a31698a875d280da0e9411.png)
其中,
![f97a69b9f3c1801a87dac7b70513f405.png](https://i-blog.csdnimg.cn/blog_migrate/f6cfa56e785b4b8b5852b67240fdcb15.png)
是用户u和item i所在的联合类中的所有成员的分数均值,类中的成员以(u,i)的形式存在。
![910c4cc137a255b9c28e086ce5978a5b.png](https://i-blog.csdnimg.cn/blog_migrate/2b664bac72703f3548f6c9a9fb258908.png)
是用户u所在的用户类中的所有成员的分数均值,
![a14f86413e5fe8827b383eb4018ffc86.png](https://i-blog.csdnimg.cn/blog_migrate/b1754e0a42e6396ff02309af31932c16.png)
是item i所在的item 类中的所有成员的分数均值,
![1c46c224e22cf61241cc4c3c2f0d7cd4.png](https://i-blog.csdnimg.cn/blog_migrate/5812a27b6ec106bf8568991d6d46f054.png)
是用户u历史上打过的所有的分值的均值,
![2ec903cb1f9e9c0a72af78a70a8bb2d0.png](https://i-blog.csdnimg.cn/blog_migrate/65c1b8f333c6bc8e9e2438eb392b2f3c.png)
是item i得到的所有分数的均值。
Surprise包在实现该算法时,逻辑如下:
1) 初始化所有item和user所属的类
2) 计算
![a108796ad577a73f28b38f1678ebb986.png](https://i-blog.csdnimg.cn/blog_migrate/e1d894e44b2a13d74d29e5ad9371a8f8.png)
3) 更新每一个item和user所属的类
4) 跳转到2)循环进行
步骤3)中的user所属类的更新逻辑是:遍历每一个打分记录,对于当前的记录(u,i,rating),假设用户u依次属于每一个类别,item i的类别不变,然后使用用户u历史上评价过低所有item计算该类别下的误差,然后取误差最小的类别来更新用户u所属的类别。Item所属类别的更新逻辑类似。
二. SlopeOne
这是迄今为止非常简单且有效的一种完全基于统计的协同过滤算法, 该算法是根据文献【2】来实现的。该算法的主要思想是通过当前用户打分的所有item与当前item i在同一用户下的得分偏差总和来估算当前用户对item i的打分。其预测函数如下:
![aa97d1cf5a5616f4ba00c1b24525cc30.png](https://i-blog.csdnimg.cn/blog_migrate/b6f6f0fc98b04b1f347fe6c9f31439e6.png)
![d5bc4899aa84f34203cb3c54d3f46465.png](https://i-blog.csdnimg.cn/blog_migrate/4fb23fbcd580c8c124001bc83a005567.png)
其中,
![ee5d9557e03fbbd28e76481e7f36c365.png](https://i-blog.csdnimg.cn/blog_migrate/7c6e131f7a5bfab43908c5c8432707ad.png)
表示用户u所打分的所有的item集合,
![9c34b3e4969e2117d32b6ca4bd32e61d.png](https://i-blog.csdnimg.cn/blog_migrate/b694d3e714f2abfbaffe7023c4236c00.png)
表示item i与item j的共同用户的集合,即集合中的每一个用户都曾经即给item i打过分也给item j打过分。
三. 参考文献
【1】 Thomas George and Srujana Merugu. A scalable collaborative filtering framework based on co-clustering. 2005. URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.113.6458&rep=rep1&type=pdf.
【2】 Daniel Lemire and Anna Maclachlan. Slope one predictors for online rating-based collaborative filtering. 2007. URL: http://arxiv.org/abs/cs/0702144.