1、内容协同过滤之物品协同过滤git
协同过滤算法是指:利用某兴趣相投、拥有共同经验之群体的喜爱来推荐用户感兴趣的信息,我的经过合做的机制给予信息至关程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息。github
物品协同过滤是指协同过滤算法在进行筛选的时候是以物品之间的类似度做为衡量,如图1:算法
电影名编程 |
R测试 |
Toyspa |
RxToyblog |
Jumanjici |
RxJumanjiit |
Grumpiertable |
RxGrumpier |
Waiting |
4.7 |
0.171 |
0.808 |
0.212 |
0.996 |
0.077 |
0.362 |
Father |
2.7 |
0.009 |
0.024 |
0.102 |
0.275 |
0.085 |
0.230 |
Heat |
1.0 |
0.165 |
0.165 |
0.7 |
0.7 |
0.203 |
0.023 |
总计 |
|
0.345 |
0.997 |
1.014 |
1.971 |
0.365 |
0.615 |
归一化 |
|
|
2.890 |
|
1.944 |
|
1.685 |
图1
第2、3、四行每一列的意思分别为:电影名字《Waiting》、某用户给《Waiting》的打分、《Waiting》与《Toy》之间的类似度(计算方法见第四节)、《Waiting》的打分乘以《Waiting》与《Toy》之间的类似度…以此类推。
第四行给出了类似度累计值和Rx电影名的累计值。
第五行使用Rx电影名的累计值除以类似度累计值。
根据第五行的计算,咱们基于推荐影片的评分分别为Toy:2.890,Jumanji:1.944,Grumpier:1.685。因而可知,《Toy》应该优先推荐给该用户。
2、皮尔逊相关度
皮尔逊相关系数普遍用于度量两个变量之间的相关程度,其值介于-1与1之间。
公式1
3、欧几里得距离
欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。
公式2
4、类似度矩阵
衡量物品之间的类似度,这里咱们使用用户打分维度做为类似度特征,如图2:
电影名 |
用户1打分 |
用户2打分 |
用户3打分 |
Waiting |
1 |
2 |
3 |
Father |
3 |
2 |
1 |
Heat |
1 |
2.5 |
3 |
图2
可使用皮尔逊相关度或者欧几里得距离计算:《Waiting》与《Heat》属于同一类型,与《Father》属于不一样类型。
5、系统构造基本流程
一、 构造用户打分数据,例如:ID为87的用户给部分电影的打分以下;
二、 根据用户打分数据构造物品类似度矩阵;根据类似度矩阵构造用户推荐列表,例如给ID为87的用户推荐的影片以下:
6、测试代码、测试数据、参考资料
https://github.com/dongguadan/recommender-system/tree/master/Item-Based-Filter
《集体智慧编程》