我正在使用ArangoDB,我正在尝试用它构建一个基于图形的推荐系统。
数据模型仅包含用户,项目和评级(边缘)。
因此,想要使用katz度量来计算用户对电影的亲和力。
最终我想这样做:
Get all (or a certain number of) paths between a user and a item
For all of these paths do the following:
Multiply each edge's rating with a damping factor (e.g. 0.7)
Sum up all calculated values within a path
Calculate the average of all calculated path values
结果是用户和项目之间的某种亲和力,用中间评级加权并且由定义的因子阻尼。
我试图在AQL中实现类似的东西,但它要么是错误的要么是太慢了。这样的算法如何在AQL中看到?
从性能的角度来看,基于图形的推荐系统可能有更好的选择。如果有人有建议(例如项目排名或其他算法),那么在这里得到一些想法也会很好。
我喜欢这个话题,但有时我会到达我的边界。
在下文中,@ start和@end是表示两个端点的参数;为简单起见,我假设:
FOR v,e,p IN 0..10000 OUTBOUND @start rates
OPTIONS {uniqueVertices: "path"}
FILTER v._id==@end
LET r = AVERAGE(p.edges[*].rating) * 0.7
COLLECT AGGREGATE avg = AVERAGE(r)
RETURN avg