微博社交圈子挖掘的一種有趣的思路


這是我在一篇論文中看到的思路,與之前的一些思路有比較大的不同。論文沒有通篇看完,只看到算法描述部分,我就迫不及待的實驗,對於同學,同事圈子的挖掘有一定的效果。我之前了解的一些算法的思路可以總結如下:

  1. 從節點開始,每個節點作為一個社團圈子進行合並
  2. 從整個網絡開始,通過某些算法選取某些邊,進行分割
  3. 從最大團開始,選擇合適的相似度計算的方法,對最大團進行合並

我比較關注圈子之間有重疊的情況。前兩種,我目前實驗做得少,主要集中在第三種,及其擴展。第三種思路目前比較經典的就是k-clique算法,相似度計算的依據很強,很直接,就是要有k-1公共節點。后來有幾篇文章,也是從最大團開始做的。我個人認為,是一個很好的開始。對於最大團思路的進一步分析,在后面的博客會有進一步的深入。我一直很看好這個思路。 這里要討論的論文的思路與上面三種都不同,與2,3有點類似,當仍有較大不同。論文中沒有命名,我姑且稱之為local方法,這個方法的核心思路是,從局部的角度考慮節點是否能夠作為一個社團。這個方法,有一個假設,就是社團或者圈子,就是一個局部的結構。只會包含一個節點,以及它的鄰居們。這個假設是合理的。根據這個假設,就可以尋找從某一個節點開始的,這個節點屬於的社團。方法中,有兩個度量,一個是社團的fitness,另一個是節點的fitness。社團的fitness定義如下:

其中,k[in]表示社團內部的總的度數,k[out]表示社團內部的節點與社團外部節點連邊的總數。a是一個參數,用來調整層次性。對於某一個節點的fitness定義如下:

很好理解:加入節點A的社團的fitness與移除節點A的社團的fitness的差,越大節點A越重要,如果為負,則表示A不屬於該社團。有了着兩個度量之后,就可以從某一個節點開始,知道這個點所在的社團。具體算法如下,初始社團C,只有一個節點A:

  1. 循環處理C中節點的所有鄰居節點(注意要去重,比且鄰居節點不再C中)
  2. 找到fitness最大的鄰居節點,加入到C中,得到C1
  3. 重新計算C1中的所有節點的fitness
  4. 如果某一個節點的fitness是負的,就將它從C1中移除,得到社團結構C2
  5. 如果4發生了,轉到3,否則轉到1

算法結束的條件是:當第一步得到的鄰居節點的fitness都為負,即可停止。這里有一個好處,就是可以不用使用q函數來判斷算法結束的時機。 我簡單實現了上面的算法,用我自己的關注數據測試了一下,效果如下: 以“王大美”為種子,得到的人民搜索同事圈子如下:  

悅曉0709
豆爸何銳
loveEmma
魚曉-五毛
袁小暈
王大美
即刻搜索JIKE
yellowleaf2010
guoyipeng

以“hny101”為種子,得到高中同學圈子如下:

c背a井t醫y志y貓c
兔傑列夫
hny101
奔三北P

以“bill323”為種子,得到前實驗室的同學圈子如下:

暖暖cathy
alue-fabre
bill323
hszhsh1915647047
桂林山水78

以“wpwei”為種子,得到大學同學的圈子如下:

海帶絲絲
Eva奶奶
wpwei

這幾個圈子的挖掘效果非常好,但是我的主要圈子,技術圈,挖掘得不是很理想,技術圈比較大,比較雜,不好挖掘。但是同學,同事圈子還是比較理想。對於技術圈子不好的主要效果還是這部分鏈接過於復雜,這是目前算法都不能很好解決的問題。

[引用]

Detecting the overlapping and hierarchical community structure in complex networks


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM