如何找到与Neo4j最相似的节点



我有一个车库和他们提供的汽车的列表:

Store1: [Mazda, Ford, Porsche, VW, Nissan, Opel, Toyota, Seat, Volvo]
Store2: [Porsche, Honda, Toyota, Audi]
Store3: [Opel, Toyota, Volvo, Porsche, Kia, Mazda, Seat]
Store4: [VW, Honda, Bentley, Alfa, Chevrolet, Subaru, Tesla]
Store5: [Suzuki, VW, Nissan, Ferrari, Maserati, Jag]
Store6: [Jag, Kia, Seat, Bentley, Alfa, Chevrolet, Ferrari, Mini]

我必须找到与商店1相比选项最相似的商店。您将如何构建密码来查找节点之间的相似性?

  1. 您的节点Store必须有一个属性名称,如名称:"存储1";,等等
  2. 确保您安装了数据科学插件。如果没有,请按照此处的安装操作
  3. 以下查询基于"jaccard"相似性算法。如果你想了解更多关于其他相似性算法的信息,请参阅此处

a。获取所有有这些汽车品牌库存的商店b.将数据收集为商店商品和汽车品牌类别c.计算jaccard相似性指数,并仅返回名为"store 1"的商店

MATCH (s:Store)-[r:INSTOCK]->(b:Brand)
WITH {item:id(s), categories: collect(id(b))} AS userData
WITH collect(userData) AS data
CALL gds.alpha.ml.ann.stream({
data: data,
algorithm: 'jaccard'
})
YIELD item1, item2, similarity
WITH  gds.util.asNode(item1).name AS Store1, gds.util.asNode(item2).name AS StoreX, similarity WHERE Store1 = 'Store 1'
RETURN  Store1, StoreX, similarity
ORDER BY StoreX

如果你想手动计算,那么商店1到商店X的jaccard相似性指数(其中X是任何商店#>1(是商店1和商店X之间常见汽车品牌的数量,除以商店1加上商店X的唯一汽车品牌总数。例如;Store1到Store2是2/11或0.1818,因为有2个常见品牌(保时捷和丰田(,Store1加Store2是11个独特品牌。

最新更新