日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
這個(gè)圖聚類Python開(kāi)源工具火了:可對(duì)社群結(jié)構(gòu)進(jìn)行可視化、檢測(cè)

 最近,又有一款Python可視化工具火了。

10多年的偏關(guān)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整偏關(guān)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“偏關(guān)網(wǎng)站設(shè)計(jì)”,“偏關(guān)網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

這一次,功能是針對(duì)圖聚類問(wèn)題的社群結(jié)構(gòu)進(jìn)行檢測(cè)、可視化。

該項(xiàng)目的帖子在reddit上一經(jīng)發(fā)布,就被頂?shù)搅恕皺C(jī)器學(xué)習(xí)板塊”的榜首。

一起來(lái)看看它究竟都能用來(lái)做什么吧~

功能亮點(diǎn)

這款工具叫做communities, 是一個(gè)Python庫(kù),用于圖聚類問(wèn)題的社群結(jié)構(gòu)檢測(cè)。

它支持多種算法,包括:

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

更贊的是,communities還可以實(shí)現(xiàn)這些算法的可視化。

具體了解一下~

導(dǎo)入算法并插入矩陣

這里以Louvain算法為例。

這是一種基于模塊度的社群發(fā)現(xiàn)算法,也是貪心算法。

它根據(jù)頂點(diǎn)的共享邊將頂點(diǎn)排列成社群結(jié)構(gòu),也就是說(shuō),它將節(jié)點(diǎn)分為幾個(gè)社群,每個(gè)社群之間共享很少的連接,但是同一社群的節(jié)點(diǎn)之間共享許多連接。

最終,讓整個(gè)社群網(wǎng)絡(luò)呈現(xiàn)出一種模塊聚集的結(jié)構(gòu),實(shí)現(xiàn)整個(gè)社群網(wǎng)絡(luò)的模塊度的最大化。

所以首先,我們需要構(gòu)建一個(gè)表示無(wú)向圖的鄰接矩陣,可以加權(quán),也可以不加權(quán),矩陣為2Dnumpy數(shù)組。

n*n矩陣則表示有n個(gè)節(jié)點(diǎn),矩陣的每個(gè)位置分別表示各節(jié)點(diǎn)之間邊的關(guān)系,有邊則為1,沒(méi)有邊則為0。

然后,只需從communities.algorithms中導(dǎo)入算法并插入矩陣。

 
 
 
 
  1. import numpy as np 
  2. from communities.algorithms import louvain_method 
  3. adj_matrix = np.array([[0, 1, 1, 0, 0, 0], 
  4.                        [1, 0, 1, 0, 0, 0], 
  5.                        [1, 1, 0, 1, 0, 0], 
  6.                        [0, 0, 1, 0, 1, 1], 
  7.                        [0, 0, 0, 1, 0, 1], 
  8.                        [0, 0, 0, 1, 1, 0]]) 
  9. communities, _ = louvain_method(adj_matrix) 
  10. # >>> [{0, 1, 2}, {3, 4, 5}]

接下來(lái)輸出社群列表,每個(gè)社群即為一組節(jié)點(diǎn)。

實(shí)現(xiàn)可視化,并進(jìn)行顏色編碼

利用communities將圖進(jìn)行可視化,將節(jié)點(diǎn)分到社群中并進(jìn)行顏色編碼,還可以選擇深色或淺色背景、保存圖片、選擇圖片的分辨率等等 。

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

其中各參數(shù)的具體含義為:

  •  adj_matrix (numpy.ndarray):圖的鄰接矩陣;
  •  dark (bool, optional (default=False)):如果為 True, 則繪圖為深色背景,否則為淺色背景;
  •  filename (str or None, optional (default=None)):通過(guò) filename 路徑可以將圖另存為PNG格式; 設(shè)置 None 則是用交互方式顯示圖;
  •  dpi (int or None, optional (default=None)):每英寸的點(diǎn)數(shù),控制圖像的分辨率;
  •  seed (int, optional (default=2)):隨機(jī)種子。

具體到Louvain算法的可視化,代碼是這樣的:

 
 
 
 
  1. from communities.algorithms import louvain_method 
  2. from communities.visualization import draw_communities 
  3. adj_matrix = [...] 
  4. communities, frames = louvain_method(adj_matrix) 
  5. draw_communities(adj_matrix, communities)

動(dòng)畫呈現(xiàn)算法

communities 還可以動(dòng)畫呈現(xiàn)節(jié)點(diǎn)分配到社群的過(guò)程。

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

其中各參數(shù)的含義如下:

  •  adj_matrix (numpy.ndarray):圖的鄰接矩陣;
  •  frames (list):算法每次迭代的字典列表;
  •  每個(gè)字典都有倆個(gè)鍵:“C”包含節(jié)點(diǎn)到社群的查找表,“Q”表示圖的模塊度數(shù)值;
  •  此字典列表是 louvain_method的第二個(gè)返回值;
  •  dark (bool, optional (default=False)):如果為 True, 則動(dòng)畫為深色背景和配色方案,否則為淺色方案;
  •  duration (int, optional (default=15)):動(dòng)畫所需的持續(xù)時(shí)間,以秒為單位;
  •  filename (str or None, optional (default=None)):通過(guò)filename 路徑將動(dòng)畫存為GIF;設(shè)置None則以交互方式展示動(dòng)畫;
  •  dpi (int or None, optional (default=None)):每英寸點(diǎn)數(shù),控制動(dòng)畫的分辨率;
  •  seed (int, optional (default=2)):隨機(jī)種子。

例如,空手道俱樂(lè)部網(wǎng)絡(luò)中Louvain算法的動(dòng)畫呈現(xiàn):

 
 
 
 
  1. from communities.algorithms import louvain_method 
  2. from communities.visualization import louvain_animation 
  3. adj_matrix = [...] 
  4. communities, frames = louvain_method(adj_matrix)
  5. louvain_animation(adj_matrix, frames)

我們可以看到Louvain算法的動(dòng)態(tài)過(guò)程:

  •  首先掃描數(shù)據(jù)中的所有節(jié)點(diǎn),將每個(gè)節(jié)點(diǎn)看做一個(gè)獨(dú)立的社群;
  •  接下來(lái),遍歷每個(gè)節(jié)點(diǎn)的鄰居節(jié)點(diǎn),判斷是否將該節(jié)點(diǎn)加入鄰居節(jié)點(diǎn)所在的社群,以提升模塊度;
  •  這一過(guò)程重復(fù)迭代,直到每一個(gè)節(jié)點(diǎn)的社群歸屬穩(wěn)定;
  •  最后,將所有在同一個(gè)社群的節(jié)點(diǎn)壓縮成一個(gè)新節(jié)點(diǎn),計(jì)算新節(jié)點(diǎn)的權(quán)重,直到整個(gè)圖的模塊度穩(wěn)定。

大家可以通過(guò)文末鏈接,自行嘗試一下其他算法~

此外,它還可以用于社群間鄰接矩陣、拉普拉斯矩陣以及模塊度矩陣等。

對(duì)于這款工具,不少網(wǎng)友發(fā)出“awesome”、“really cool!”等花式贊嘆,表示正是自己需要的。

當(dāng)然,也有網(wǎng)友提出疑問(wèn),例如:是否可以指定執(zhí)行的迭代次數(shù)(例如:提前停止)?

開(kāi)發(fā)者對(duì)此表示:不能,但是對(duì)于某些算法,可以指定要將圖形劃分為多少個(gè)社群。


網(wǎng)頁(yè)名稱:這個(gè)圖聚類Python開(kāi)源工具火了:可對(duì)社群結(jié)構(gòu)進(jìn)行可視化、檢測(cè)
分享路徑:http://www.5511xx.com/article/dpiiccj.html