SlopeOne算法是一个非常简单的协同过滤算法,主要思想如下:如果用户u对物品j打过分,现在要对物品i打分,那么只需要计算出在同时对物品i和j打分的这种人中,他们的分数之差平均是多少,那么我们就可以根据这个分数之差来计算用户u对物品i的打分了,当然,这样的物品j也有很多个,那有的物品和j共同打分的人少,有的物品和j共同打分的人多,那么显而易见,共同打分多的那个物品在评分时所占的比重应该大一些。
如上就是简单的SlopeOne算法的主要思想,用维基百科上的一张图来表示(一看就懂):
途中用户B要对物品J进行评分,那么这时候发现物品i被用户B打为2分,而同时发现用户A同时评价了物品i和物品j,且物品i比物品j少了0.5分,那么由此看来,用户B给物品j打得分应该就是比给物品i打的分高0.5分,故是2.5分。
由于思想是如此简单,故我们就来实践一把,当然这里就是最最朴素的实现,只是为了检测下算法效果如何。。。数据集还是如上篇博客一样,用的是movielens里面的小数据集,其中有1000用户对2000物品的评分,80%用来训练,20%用来测试。
具体代码如下:
#include <iostream>
#include <string>
#include <fstream>
#include <math.h>
using namespace std;
const int USERMAX = 1000;
c