1

我正在使用ArangoDB我试图建立一个基于图形的推荐系统。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

从性能角度来看,基于图的推荐系统可能会有更好的选择。如果有人有建议(例如物品等级或其他算法),那么在这里得到一些想法也很好。

我喜欢这个主题,但有时我会到达我的边界。

回答

0

以下,@start和@end是代表两个端点的参数;为简单起见,我认为:

  1. 最大允许路径长度为10000
  2. “速度”是“边缘”收集
  3. “评级”是属性的名称给人的名字的权重的边缘
  4. 了“阻尼”的因素是按要求
FOR v,e,p IN 0..10000 OUTBOUND @start rates 
    OPTIONS {uniqueVertices: "path"} 
    FILTER [email protected] 
    LET r = AVERAGE(p.edges[*].rating) * 0.7 
    COLLECT AGGREGATE avg = AVERAGE(r) 
    RETURN avg