背景: 使用基于用户的协同过滤算法进行网站预测
1. 流程图
2. 算法详细步骤
-
读取文件,处理每一行数据,把用户id和网址id转化为long类型(因为协同过滤模型这两列为long类),并转化为DataModel(模型输入数据)。
-
转化出用户评分矩阵(没有的填充0)。如下表所示(部分):
用户id\网址id | 1 | 10 | 100 | 101 | 102 | 103 | 104 | 105 | 106 |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 4 | 0 | 1 | 0 | 0 | 1 | 4 | 3 |
1 | 0 | 3 | 1 | 0 | 2 | 1 | 2 | 4 | 1 |
2 | 2 | 1 | 2 | 0 | 1 | 3 | 2 | 1 | 4 |
3 | 2 | 0 | 3 | 1 | 0 | 3 | 0 | 1 | 1 |
- 使用皮尔逊相似度,计算用户相似矩阵。把上表中的每一行,作为一个向量,计算当前用户与其他用户的距离,如计算用户0与用户1的距离:
用户0向量: (1, 4, 0, 1, 0, 0, 1, 4, 3)
用户1向量: (0, 3, 1, 0, 2, 1, 2, 4, 1)
计算以上两个向量的相似度,值越大,相似度越高。
关于皮尔逊相关系数计算,请参考百度百科: https://baike.baidu.com/item/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0/12712835?fr=aladdin
- 选取距离最近的前0.8%的用户,使用相似度作为权重,预测该用户没有看过,但是邻居看过的网址的评分。
计算公式
- 按评分倒序排列,选择评分最高的10个网址id,把用户id和网址id从long转回string,并写入到数据库。