推荐算法之协同过滤的简介

时间:2021-12-15 19:00:00

  推荐算法里面最为流行的就是协同过滤算法。

  先说一下协同过滤算法的定义:根据用户过去对物品的评价。来寻找与用户兴趣相同的用户组。然后由这些用户组的评价比较高的一些东西来向用户做出一定的推荐。

  优点:即时的实时的获取最新的数据。矩阵比较稀疏的时候比较困难。算法的精准度会有所下降。

  缺点:仅仅考虑了评分矩阵。有点局限。

  应用背景:因为现在大量的用户愿意提供自己的姓名,年龄,性别,教育背景等信息。这是协同过滤存在的基础吧。还有就是用户要多评价。所以很多系统现在做的很多措施都是鼓励用户去评价。

  协同过滤算法:

  首先它会有个评分矩阵:m*n.m代表用户个数。n代表商品的数目

  结合了一下两种论文的描述:我觉得其中一种论文的对协同过滤的求相似度的算法我觉得很好。

  for(1到n)

  s(i,j)+=sim(a[i][k],a[j][k])*w(b[k])

  sim(a[i][k],a[j][k])是用户i和用户j的相似度。w(b[k])是这个物品所占的比重。

  相似度的几种情况:

  一:  如果a[i][k]是数值属性的话:sim(a[i][k],a[j][k]) =1/( |a[i][k]-a[j][k]|+1)

  二:  如果是2元的属性的话。就是0和1的区别。

  三:  如果是分类属性的话。就用depfather(a[i][k],a[j][k])/(min(a[i][k],a[j][k])

  根据s(i,j)的大小来选出前M个用户。

  预测公式为:

  p[j][i] = a[k][i] +((s[i][j]*(r[i][k]-a[k][i]))整个前M个用户的和)/(s[i][j]整个前M个用户的和)

  a[k][i]为前m个对这个物品的评价的均值。 s[i][j]为i与j的相似度。r[i][k]为用户i对这个物品的实际评价。

  改进之一:

  结合了用户的层次。这个用户的层次可以是按照教授,副教授以及普通教师,学生等进行分类。还可以按照学历还进行分类。

  首先寻找自己的用户组。

  f[d][c]表示用户组c对d的理解深度。这个数组是全序关系的。所以两个用户组的层次关系可以:d[d1][d2]=|f[d][c1]-f[d][c2]|.层次相关性系数a[x]:1/(d[d1][d2]+1)

  这样一来在最初的推荐算法的求出来的值上面再乘以系数。p[j][i]*a[i]。

  总结:

  上面写的这些是我对看完这两篇论文的感想。一点小感想。写的不好见谅。自我感觉推荐算法这块是未来一段时间的趋势。

  参考文献:

  基于用户层次信息的协同过滤算法。秦国 杜小勇

  结合用户背景信息的协同过滤算法。吴一帆  王浩然