0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

發(fā)現(xiàn)一個寶藏Python庫,玩社區(qū)發(fā)現(xiàn)算法的不能錯過!

Android編程精選 ? 來源:任識算法 ? 2023-02-08 11:11 ? 次閱讀
網(wǎng)絡(luò)是由一些緊密相連的節(jié)點組成的,并且根據(jù)不同節(jié)點之間連接的緊密程度,網(wǎng)絡(luò)也可視為由不同簇組成。簇內(nèi)的節(jié)點之間有著更為緊密的連接,不同簇之間的連接則相對稀疏。這種簇被稱為網(wǎng)絡(luò)中的社區(qū)結(jié)構(gòu)(community structure)。

由此衍生出來的社區(qū)發(fā)現(xiàn)(community detection)算法用來發(fā)現(xiàn)網(wǎng)絡(luò)中的社區(qū)結(jié)構(gòu),這類算法包括Louvain 算法、Girvan-Newman 算法以及 Bron-Kerbosch 算法等。

最近,在 GitHub 上發(fā)現(xiàn)了一個可以發(fā)現(xiàn)圖中社區(qū)結(jié)構(gòu)的 Python 庫 communities,該庫由軟件工程師 Jonathan Shobrook 創(chuàng)建。

6aa6c156-a736-11ed-bfe3-dac502259ad0.png

項目地址:https://github.com/shobrook/communities

首先,該庫可以實現(xiàn)以下幾種社區(qū)發(fā)現(xiàn)算法:

  • Louvain 算法
  • Girvan-Newman 算法
  • 層次聚類
  • 譜聚類
  • Bron-Kerbosch 算法

其次,用戶還可以使用 communities 庫來可視化上述幾種算法,下圖為空手道俱樂部(Zachary's karate club)網(wǎng)絡(luò)中 Louvain 算法的可視化結(jié)果:

6abd92c8-a736-11ed-bfe3-dac502259ad0.gif

該庫的安裝方法也非常簡單,可采用 pip 的方式安裝 communities,代碼如下:

importnumpyasnp

fromcommunities.algorithmsimportlouvain_method

adj_matrix=np.array([[0,1,1,0,0,0],
[1,0,1,0,0,0],
[1,1,0,1,0,0],
[0,0,1,0,1,1],
[0,0,0,1,0,1],
[0,0,0,1,1,0]])

communities,_=louvain_method(adj_matrix)

>>communities
[{0,1,2},{3,4,5}]

對于這個 Python 庫,很多網(wǎng)友給予了高度評價,表示會去嘗試。

6b316234-a736-11ed-bfe3-dac502259ad0.png

算法詳解

1、Louvain 算法

louvain_method(adj_matrix:numpy.ndarray,n:int=None)->list

該算法來源于文章《Fast unfolding of communities in large networks》,簡稱為 Louvian。

作為一種基于模塊度(Modularity)的社區(qū)發(fā)現(xiàn)算法,Louvain 算法在效率和效果上都表現(xiàn)比較好,并且能夠發(fā)現(xiàn)層次性的社區(qū)結(jié)構(gòu),其優(yōu)化的目標是最大化整個圖屬性結(jié)構(gòu)(社區(qū)網(wǎng)絡(luò))的模塊度。

Louvain 算法對最大化圖模塊性的社區(qū)進行貪婪搜索。如果一個圖具有高密度的群體內(nèi)邊緣和低密度的群體間邊緣,則稱之為模圖。

示例代碼如下:

fromcommunities.algorithmsimportlouvain_methodad

j_matrix=[...]

communities,_=louvain_method(adj_matrix)

2、Girvan-Newman 算法

girvan_newman(adj_matrix:numpy.ndarray,n:int=None)->list

該算法來源于文章《Community structure in social and biological networks》。

Girvan-Newman 算法迭代刪除邊以創(chuàng)建更多連接的組件。每個組件都被視為一個 community,當模塊度不能再增加時,算法停止去除邊緣。

示例代碼如下:

fromcommunities.algorithmsimportgirvan_newman

adj_matrix=[...]

communities,_=girvan_newman(adj_matrix)

3、層次聚類

hierarchical_clustering(adj_matrix:numpy.ndarray,metric:str="cosine",linkage:str="single",n:int=None)->list

層次聚類實現(xiàn)了一種自底向上、分層的聚類算法。每個節(jié)點從自己 的社區(qū)開始,然后,隨著層次結(jié)構(gòu)的建立,最相似的社區(qū)被合并。社區(qū)會一直被合并,直到在模塊度方面沒有進一步的進展。

示例代碼如下:

fromcommunities.algorithmsimporthierarchical_clustering

adj_matrix=[...]

communities=hierarchical_clustering(adj_matrix,metric="euclidean",linkage="complete")

4、譜聚類

spectral_clustering(adj_matrix:numpy.ndarray,k:int)->list

這種類型的算法假定鄰接矩陣的特征值包含有關(guān)社區(qū)結(jié)構(gòu)的信息。

示例代碼如下:

fromcommunities.algorithmsimportspectral_clustering

adj_matrix=[...]

communities=spectral_clustering(adj_matrix,k=5)

5、Bron-Kerbosch 算法

bron_kerbosch(adj_matrix:numpy.ndarray,pivot:bool=False)->list
Bron-Kerbosch 算法實現(xiàn)用于最大團檢測maximal clique detection)。圖中的最大團是形成一個完整圖的節(jié)點子集,如果向該子集中添加其他節(jié)點,則它將不再完整。將最大團視為社區(qū)是合理的,因為團是圖中連接最緊密的節(jié)點群。因為一個節(jié)點可以是多個社區(qū)的成員,所以該算法有時會識別重疊的社區(qū)。示例代碼如下:
fromcommunities.algorithmsimportbron_kerbosch

adj_matrix=[...]

communities=bron_kerbosch(adj_matrix,pivot=True)

可視化

繪圖

draw_communities(adj_matrix:numpy.ndarray,communities:list,dark:bool=False,filename:str=None,seed:int=1)

可視化圖(graph),將節(jié)點分組至它們所屬的社區(qū)和顏色編碼中。返回代表繪圖的 matplotlib.axes.Axes。示例代碼如下:

fromcommunities.algorithmsimportlouvain_method

fromcommunities.visualizationimportdraw_communities

adj_matrix=[...]

communities,frames=louvain_method(adj_matrix)

draw_communities(adj_matrix,communities)

可視化圖如下:

6b4d0958-a736-11ed-bfe3-dac502259ad0.jpg

Louvain 算法的動圖展示

louvain_animation(adj_matrix:numpy.ndarray,frames:list,dark:bool=False,duration:int=15,filename:str=None,dpi:int=None,seed:int=2)

Louvain 算法在圖中的應(yīng)用可以實現(xiàn)動圖展示,其中每個節(jié)點的顏色代表其所屬的社區(qū),并且同一社區(qū)中的節(jié)點聚類結(jié)合在一起。

示例代碼如下:

fromcommunities.algorithmsimportlouvain_method

fromcommunities.visualizationimportlouvain_animation

adj_matrix=[...]

communities,frames=louvain_method(adj_matrix)

louvain_animation(adj_matrix,frames)

動圖展示如下:

6b64fc8e-a736-11ed-bfe3-dac502259ad0.gif

參考鏈接:

https://www.codenong.com/cs105912940/

https://www.reddit.com/r/MachineLearning/comments/lozys9/p_i_made_communities_a_library_of_clustering/

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4580

    瀏覽量

    92362
  • 可視化
    +關(guān)注

    關(guān)注

    1

    文章

    1154

    瀏覽量

    20823
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4759

    瀏覽量

    84299

原文標題:發(fā)現(xiàn)一個寶藏 Python 庫,玩社區(qū)發(fā)現(xiàn)算法的不能錯過!

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于復(fù)雜網(wǎng)絡(luò)社區(qū)結(jié)構(gòu)的論壇熱點主題發(fā)現(xiàn)

    社區(qū)結(jié)構(gòu)是復(fù)雜網(wǎng)絡(luò)的重要特征之,該文通過構(gòu)造基于興趣的論壇用戶網(wǎng)絡(luò),成功地將社區(qū)結(jié)構(gòu)發(fā)現(xiàn)的理論與方法應(yīng)用于論壇熱點主題的自動發(fā)現(xiàn),提出了極
    發(fā)表于 04-22 08:45 ?12次下載

    基于鏈接分析和用戶興趣的微博社區(qū)發(fā)現(xiàn)算法

    微博網(wǎng)絡(luò)中的每一個節(jié)點代表微博用戶,微博用戶之間除了存在定的社會關(guān)系外,用戶本身也具有定的特性。用戶之間明顯的鏈接關(guān)系可以為
    發(fā)表于 11-21 17:06 ?3次下載

    種基于聚集系數(shù)的社區(qū)發(fā)現(xiàn)算法

    ,社區(qū)發(fā)現(xiàn)變得更為復(fù)雜。提出了種局部社區(qū)發(fā)現(xiàn)算法,該算法
    發(fā)表于 12-05 16:03 ?2次下載
    <b class='flag-5'>一</b>種基于聚集系數(shù)的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    基于標簽影響力的半同步社區(qū)發(fā)現(xiàn)算法

    微博網(wǎng)絡(luò)與社交網(wǎng)絡(luò)等的交互式社會信息網(wǎng)絡(luò)規(guī)模的快速增長對社區(qū)發(fā)現(xiàn)提出巨大挑戰(zhàn)。標簽傳播算法( LPA)雖然在時間復(fù)雜度上具有很大的優(yōu)勢,但是其內(nèi)在的多種隨機策略使得算法穩(wěn)定性不高。針對
    發(fā)表于 12-17 11:34 ?0次下載

    種加權(quán)稠密子圖社區(qū)發(fā)現(xiàn)算法

    目前,針對復(fù)雜網(wǎng)絡(luò)的社區(qū)發(fā)現(xiàn)算法大多僅根據(jù)網(wǎng)絡(luò)的拓撲結(jié)構(gòu)來確定社區(qū),然而現(xiàn)實復(fù)雜網(wǎng)絡(luò)中的邊可能帶有表示連接緊密程度或者可信度意義的權(quán)重,這些先驗信息對
    發(fā)表于 12-25 10:13 ?0次下載

    融合多維數(shù)據(jù)的微博社區(qū)發(fā)現(xiàn)算法

    隨著微博用戶的不斷增加,微博網(wǎng)絡(luò)已成為用戶進行信息交流的平臺,針對由于博文長度受限,傳統(tǒng)的社區(qū)發(fā)現(xiàn)算法無法有效解決微博網(wǎng)絡(luò)的稀疏性等問題,提出了DC-DTM(discovery community
    發(fā)表于 01-02 16:26 ?3次下載
    融合多維數(shù)據(jù)的微博<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    自動編碼器的社區(qū)發(fā)現(xiàn)算法

    社區(qū)結(jié)構(gòu)是復(fù)雜網(wǎng)絡(luò)的重要特征之社區(qū)發(fā)現(xiàn)對研究網(wǎng)絡(luò)結(jié)構(gòu)有重要的應(yīng)用價值.K均值等經(jīng)典聚類算法是解決社區(qū)
    發(fā)表于 01-02 18:32 ?0次下載
    自動編碼器的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    基于標簽傳播的社交網(wǎng)絡(luò)的社區(qū)發(fā)現(xiàn)模型

    針對基于標簽傳播的復(fù)雜網(wǎng)絡(luò)重疊社區(qū)發(fā)現(xiàn)算法中預(yù)先輸入?yún)?shù)在真實網(wǎng)絡(luò)中的局限性以及標簽冗余等問題,提出種基于標簽傳播的面向大規(guī)模學(xué)術(shù)社交網(wǎng)絡(luò)的社區(qū)
    發(fā)表于 01-04 16:49 ?0次下載
    基于標簽傳播的社交網(wǎng)絡(luò)的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b>模型

    組合29簡單Python代碼塊,自動發(fā)現(xiàn)算法

    本文提出了種基于演化算法的搜索策略,將其AAD中實現(xiàn)。AAD可以基于Python的子集作為語法結(jié)構(gòu),組合成復(fù)雜度相對較高的程序(循環(huán),嵌套塊,嵌套函數(shù)調(diào)用等),并生成可執(zhí)行的Python
    的頭像 發(fā)表于 04-19 13:47 ?3456次閱讀

    多層網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)相關(guān)研究及對比

    社區(qū)發(fā)現(xiàn)是復(fù)雜網(wǎng)絡(luò)分析的重要任務(wù)」現(xiàn)有的社區(qū)發(fā)現(xiàn)方法大多面向單層網(wǎng)絡(luò),對現(xiàn)實世界中廣泛存在的多層網(wǎng)絡(luò)中的社區(qū)
    發(fā)表于 04-07 15:41 ?23次下載
    多層網(wǎng)絡(luò)<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b>相關(guān)研究及對比

    結(jié)合改進差分進化和模塊密度的社區(qū)發(fā)現(xiàn)算法

    引入社區(qū)發(fā)現(xiàn)中,提出了種結(jié)合改進差分進化和模塊密度的社區(qū)發(fā)現(xiàn)算法。該
    發(fā)表于 04-12 14:54 ?4次下載
    結(jié)合改進差分進化和模塊密度的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    復(fù)雜網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)下的多目標五行環(huán)優(yōu)化算法

    社區(qū)結(jié)構(gòu)作為復(fù)雜網(wǎng)絡(luò)的重要特性,對理解網(wǎng)絡(luò)的功能和結(jié)構(gòu)具有重要意義。為了解決復(fù)雜網(wǎng)絡(luò)的社區(qū)發(fā)現(xiàn)問題,提出了種多目標五行環(huán)優(yōu)化算法( Mul
    發(fā)表于 05-17 16:47 ?2次下載

    通用的動態(tài)社區(qū)發(fā)現(xiàn)研究框架綜述

    隨著社交媒體多樣性的増加,實時分析社交網(wǎng)絡(luò)的需求不斷増大,動態(tài)社區(qū)發(fā)現(xiàn)的硏究受到了廣泛的關(guān)注。已有的社區(qū)發(fā)現(xiàn)綜述多是側(cè)重靜態(tài)社區(qū)
    發(fā)表于 06-04 15:15 ?5次下載

    基于譜聚類的多目標復(fù)雜網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)算法

    多目標優(yōu)化算法在復(fù)雜網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)中具有很強的競爭力,然而,在處理社區(qū)結(jié)構(gòu)較為模糊、網(wǎng)絡(luò)數(shù)據(jù)規(guī)模大的問題時難以得到滿意的效果。為克服現(xiàn)有多目標方法的不足,提岀
    發(fā)表于 06-17 15:02 ?11次下載

    ESN中基于貪婪派系擴張的重疊社區(qū)發(fā)現(xiàn)算法

    傳統(tǒng)局部擴張方法在對企業(yè)社會化網(wǎng)絡(luò)(ESN)中的重疊社區(qū)結(jié)構(gòu)進行識別時,存在計算冗余與社區(qū)挖掘不徹底的問題。為此,提出種基于貪婪派系擴張的重疊社區(qū)
    發(fā)表于 06-24 11:16 ?16次下載