簡體   English   中英

通過刪除節點(頂點)實現幾乎集群圖的圖集群

[英]Graph Clustering for almost Clustered Graph by removing nodes(vertices)

我想在具有數百萬個邊和節點的巨大無向圖中進行圖聚類。 圖幾乎是由僅由某些節點(可能與多個群集相關的模糊節點)連接在一起的不同群集組成的群集。 兩個簇之間幾乎沒有或幾乎沒有邊緣 這個問題幾乎與查找圖的頂點割集相似,唯一的例外是圖需要划分為許多組件(其數量未知)。(請參閱此圖片https://docs.google.com/file/d / 0B7_3zLD0X​​dtAd3ZwMFAwWDZuU00 / edit?pli = 1

它幾乎就像不同的強連接組件在它們之間共享幾個節點一樣,我應該刪除那些節點以分離那些強連接組件。 邊被加權了,但是這個問題更像是在圖中找到結構,因此邊的加權將不相關。 (考慮該問題的另一種方法是可視化實體球體在某些點相互接觸,其中球體是那些緊密連接的組件,而接觸點是那些模糊的節點)

我正在做一些原型設計,所以請安靜一點時間自己挑選圖聚類算法並選擇最佳方法。 另外,我需要一種可以削減節點而不減少邊緣的解決方案,因為在我的情況下,不同的群集共享節點而不減少邊緣。

是否有研究論文,博客解決了這個問題或一些相關問題? 或者任何人都可以想出解決此問題的方法,無論它多么骯臟。

由於涉及數百萬個節點和邊緣,因此我需要該解決方案的MapReduce實現。 任何輸入,也有鏈接嗎?

我現在可以直接使用MapReduce中的任何開源實現嗎?

我認為此問題類似於通過刪除頂點在在線社交網絡中查找社區。

您的問題不是那么簡單。 恐怕它與集團問題有關,NP問題是完整的,因此除非您以某種方式量化“集群之間幾乎沒有邊緣”的陳述,否則您的問題可能仍然非常棘手。 但是我會試着嘗試一種骯臟,貪婪的方法,即將節點視為以下一種准神經網絡:

我認為每個頂點都有輸入,輸出和一個S型激活函數,可將輸入值(輸入之和)轉換為輸出值。 我認為這很重要,它的輸出值不會被克隆並發送給所有鄰居,而是在鄰居之間平均分配。 除此之外,我將定義神經元活動的對數衰減(自我抑制,自身抑制連接),該衰減由網絡的全局衰減參數定義。

現在,我將開始模擬所有神經元,這些神經元從活動0.5(活動范圍為0到1)開始,具有非常高的衰減參數,這將導致所有神經元迅速穩定在0狀態。 然后,我將逐漸減小衰減參數,直到穩態結果產生第一個具有非零穩定活動的團。

問題是下一步該怎么做。 一種可能性是從圖中減去找到的集團,然后再次運行相同的過程,直到找到所有集團。 如果您的圖的行為確實與您所說的一樣好(實際上幾乎是群集的),那么這種貪婪的方法可能會成功,但否則可能會導致意外的結果。 另一種可能性是為找到的群體提供獨特的群體氣味,該氣味將排斥其他群體(相互抑制),重新運行該算法,直到找到第二個群體,再賦予其他所有其他群體排斥的群體氣味,直到每個節點為止。有自己指定的氣味。

我認為這將和我對此有很多大想法。

關鍵是,由於在一般情況下(可能是NP完整)可能無法解決此問題,因此您需要利用圖形具有的任何特殊屬性。 這意味着您需要使用一段時間,直到算法解決了您遇到的99%的情況。 我認為,如果不對遇到的實際數據集進行長時間的試驗,就不可能給出精確數字答案。

由於涉及數百萬個節點和邊緣,因此我需要該解決方案的MapReduce實現。 任何輸入,也有鏈接嗎?

以我的經驗,我懷疑在此使用Map / Reduce是否會真正具有優勢。 前10 ^ 6個節點的順序實際上並沒有那么大(在非超連接圖中也是如此,因為您正在考慮聚類),以及使用Map / Reduce的開銷[除非您已經設置了硬件/軟件為此],因為您的問題將不值得。

Map / Reduce可以更好地工作,一旦您解決了聚類問題,然后希望使用相似的分析來處理每個聚類。 基本上,當您可以將任務分解為相對獨立的子任務時,可以並行執行這些子任務。 當然,這可以級聯為幾層。

在相對類似的情況下,我個人首先將圖形建模到圖形數據庫中(我使用Neo4J,並且會強烈推薦它),然后對它進行分析和查詢。 您會驚訝於該解決方案對白板的友好程度,甚至大規模連接和連接的查詢都將幾乎立即執行,尤其是在只有幾百萬個節點的規模上。 例如,您可以根據分離度進行過濾分析,然后列出公用物。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM