日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

neo4j实现Louvain算法

發(fā)布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 neo4j实现Louvain算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 例子一:創(chuàng)建一個屬性圖(無權)
  • 一、屬性圖如下
  • 二、實現算法
    • 1.stream模式執(zhí)行Louvain算法(匿名圖)
    • 2.結果如下
  • 總結一:
  • 例子二:創(chuàng)建一個屬性圖(有權)
  • 一、屬性圖如下
  • 二、算法實現
    • 1.stream模式執(zhí)行Louvain算法(命名圖)
    • 2.結果如下
    • 3.帶權值計算
    • 4.結果如下
    • 5.含原始社區(qū)屬性計算
    • 6.結果如下
  • 總結二:


例子一:創(chuàng)建一個屬性圖(無權)

這次用的方法是本地load導入的,兩個代碼塊分別導入節(jié)點、節(jié)點間關系。

load csv with headers from "file:///sw-nodes.csv" as rowmerge (place:Place{id:row.id}) load csv with headers from "file:///sw-relationships.csv" as rowmatch (origin:Place{id:row.src})match (destination:Place{id:row.dst})merge (origin) - [r:DEPENDS_ON]->(destination)

一、屬性圖如下

二、實現算法

1.stream模式執(zhí)行Louvain算法(匿名圖)

CALL gds.louvain.stream({nodeProjection: 'Place',relationshipProjection: {TYPE: {type: 'DEPENDS_ON',orientation: 'undirected',aggregation: 'NONE'}},includeIntermediateCommunities:True }) YIELD nodeId, communityId RETURN gds.util.asNode(nodeId).id AS name, communityId ORDER BY name ASC

參數<>includeIntermediateCommunities:True,為真的時候,顯示劃分時出現的中間社團,結果最后一列表示該節(jié)點都曾被劃分到哪個社團。中間一列表示節(jié)點最后所在社團。

2.結果如下

總結一:

如果你熟悉其他算法,會發(fā)現這個結果和連通分量算法(Connected components algorithm)結果一樣,因為這是屬性圖中只包含了三個獨立的社團,很容易區(qū)分開來。而且這個屬性圖本身是無權的。

例子二:創(chuàng)建一個屬性圖(有權)

CREATE(nAlice:User {name: 'Alice', seed: 42}),(nBridget:User {name: 'Bridget', seed: 42}),(nCharles:User {name: 'Charles', seed: 42}),(nDoug:User {name: 'Doug'}),(nMark:User {name: 'Mark'}),(nMichael:User {name: 'Michael'}),(nAlice)-[:LINK {weight: 1}]->(nBridget),(nAlice)-[:LINK {weight: 1}]->(nCharles),(nCharles)-[:LINK {weight: 1}]->(nBridget),(nAlice)-[:LINK {weight: 5}]->(nDoug),(nMark)-[:LINK {weight: 1}]->(nDoug),(nMark)-[:LINK {weight: 1}]->(nMichael),(nMichael)-[:LINK {weight: 1}]->(nMark);

一、屬性圖如下

二、算法實現

1.stream模式執(zhí)行Louvain算法(命名圖)

圖命名:myGraph

CALL gds.graph.create('myGraph','User',{LINK: {orientation: 'UNDIRECTED'}},{nodeProperties: 'seed',relationshipProperties: 'weight'} )

結果如下:

執(zhí)行算法:

CALL gds.louvain.stream('myGraph',{includeIntermediateCommunities: true} ) YIELD nodeId, communityId, intermediateCommunityIds RETURN gds.util.asNode(nodeId).name AS name, communityId, intermediateCommunityIds ORDER BY name ASC

2.結果如下

這里劃分兩個社團

3.帶權值計算

CALL gds.louvain.stream('myGraph',{ relationshipWeightProperty: 'weight' ,includeIntermediateCommunities: true} ) YIELD nodeId, communityId, intermediateCommunityIds RETURN gds.util.asNode(nodeId).name AS name, communityId, intermediateCommunityIds ORDER BY name ASC

4.結果如下

帶權值之后,劃分了三個社團

5.含原始社區(qū)屬性計算

參數<>seedProperty:Used to set the initial community for a node. The property value needs to be a number.
用于設置節(jié)點的初始社區(qū)。屬性值必須是數字。

CALL gds.louvain.stream('myGraph',{ seedProperty: 'seed',relationshipWeightProperty: 'weight' ,includeIntermediateCommunities: true} ) YIELD nodeId, communityId, intermediateCommunityIds RETURN gds.util.asNode(nodeId).name AS name, communityId, intermediateCommunityIds ORDER BY name ASC

6.結果如下

其實僅帶有seedProperty屬性,去掉關系權重“relationshipWeightProperty: ‘weight’ ,”這句話,該屬性圖可以直接劃分為兩個社區(qū),結果和本例子初次執(zhí)行結果一致,社團【2】【5】。因為有權重的影響Alice被劃分出去,最終三個社團,這更加符合現實情況。

總結二:

這個算法的最優(yōu)解還是需要考慮權重、迭代次數等等因素,從而符合最終預期目標,如果有需要可以參考文檔(有需要請留言)。

總結

以上是生活随笔為你收集整理的neo4j实现Louvain算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。