什麼事社區發現

 朋友要我通俗地講講什麼是“社區發現”,這下還真覺得有些爲難。之前寫東西,上來就是概念、術語、公式和算法,這些對於有專業基礎的朋友當然沒問題,但對於那些沒有基礎而且也只想知道個大概的朋友顯然就不適合了。嘗試着寫了寫,覺得通俗和嚴謹之間的度還真不容易把握。看來,通俗易懂地表達東西也是門需要花時間修煉的功夫,以後這樣的內容還是要多多練習才行。


       如果你仔細觀察,你會發現,我們的生活中存在着各種各樣的網絡,如科研合作網絡、演員合作網絡、城市交通網絡、電力網、以及像 QQ、微博、微信這樣的社交網絡。

       這些網絡有什麼特點呢?我們以大家最熟悉的社交網絡來看看。

       社交網絡的核心是參與其中的用戶以及用戶之間的關係。因此,我們可以採用圖模型來爲其進行建模,其中的節點表示社交網絡中一個個的用戶,而邊則表示用戶與用戶之間的關係,如果想對這些關係強度(或親密度)進行區分的話,我們還可以爲每條邊賦予一個權重,權值越大表示關係強度越大(或者越親密)。

       首先給出一個示意圖。如果我們研究的是演員合作網絡,圖中的節點就表示演藝圈的演員,邊就表示演員之間的合作關係;如果我們研究的是新浪微博,圖中的節點就表示新浪微博註冊用戶,邊就表示用戶之間的關注關係。

       大家注意,所謂的建模就是將若干相似的事物或場景的共性抽取出來,然後針對該模型來設計相應的算法,從而解決一類問題。

       如果仔細看,你會發現這個圖包含一定的結構,那就是,其中存在一個一個的節點子集合,在這些子集合的內部,邊比較多,而子集合與子集合之間,邊比較少。具體將這些節點子集合圈出來,就是這個樣子。 

       這其實跟我們生活中的一些場景是吻合的。比如,考慮一個創意園區裏各員工的認識關係,你會發現,一個公司就會對應一個節點子集合,因爲同一個公司的人大部分彼此相互認識,而公司與公司之間的人則相互認識的不多。

       注意,剛纔舉的例子中,每一個節點只能屬於一個子集合,因爲每一個員工只屬於一家公司,因此各個節點子集合是互不重疊的。但是,在某些場景下,節點子集合之間可能發生重疊,即同一個節點可能同時屬於多個子集合。

       我們舉一個關於小區大媽組隊跳廣場舞的例子,一般來說,每個大媽參加活動時,往往會優先選擇自己所在小區的廣場舞隊伍,但是,有些大媽精力比較旺盛,覺得只參加自己小區的隊伍還不過癮,或者她是社交型人士,希望通過跳廣場舞認識更多的朋友,那麼,她可能會同時參加周邊小區的多個廣場舞隊伍,這樣一來,相應的圖結構就變成這個樣子了。

       圖中一種顏色就代表一支廣場舞大媽隊伍,而中間那些塗成彩色的節點則表示同時參與了多個隊伍的活躍大媽。不可小覷了這些彩色節點,它們的重要性是不言而喻的。你想,如果小區之間想要搞個廣場舞聯誼,就可以由她們來組織了,因爲她們穿梭於各個小區的廣場舞隊伍,起着交際紐帶的作用。

       好了,例子舉完了,接下來結合這兩個例子給出一些相關的概念,那些內部連接比較緊密的節點子集合對應的子圖叫做社區(community),各社區節點集合彼此沒有交集的稱爲非重疊型(disjoint)社區,有交集的稱爲重疊型(overlapping)社區。網絡圖中包含一個個社區的現象稱爲社區結構,社區結構是網絡中的一個普遍特徵。給定一個網絡圖,找出其社區結構的過程叫做社區發現(community detection)。

       社區發現是一件很有意義的事情。以社交網絡爲例,社區結構是客觀存在的,但某個社區內的某個用戶只和那些與其有直接邊相連的用戶產生互動,殊不知,在這個社區內,他和那些與其沒有直接邊相連的用戶其實也很“近”,如果要做好友推薦,屬於同一社區的用戶之間應該優先進行推薦。此外,“物以類聚,人以羣分”,對一個大型網絡調用社區發現算法,其實是對其按照某種標準進行了劃分,在此基礎上可對每個社區做進一步的發掘。而從計算的角度而言,社區分劃相當於分解了任務,起到了降低計算複雜度的作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章