10X單細(xì)胞(10X空間轉(zhuǎn)錄組)聚類算法之Louvain

hello,大家好,之前呢,分享了10X單細(xì)胞和10X空間轉(zhuǎn)錄組的降維算法,不知道大家掌握了多少。今天我們來分享默認(rèn)的聚類算法Louvain,Louvain算法是目前單細(xì)胞分析中最常用的聚類算法,Seurat/Scanpy/RaceID等單細(xì)胞分析工具都默認(rèn)louvain算法,那么我們就來分享一下這個聚類算法,很深的算法我們我們盡量理解,但是算法的精髓和運(yùn)用必須掌握,我們用一個例子來展開。

社會網(wǎng)絡(luò)(social network)是是由許多節(jié)點(diǎn)構(gòu)成的一種社會結(jié)構(gòu),節(jié)點(diǎn)通常是指個人或組織,社會網(wǎng)絡(luò)代表各種社會關(guān)系,社會網(wǎng)絡(luò)關(guān)注的是人們之間的互動和聯(lián)系,社會互動會影響人們的社會行為。對于社交網(wǎng)絡(luò)的分析和研究范圍很廣,例如在社交網(wǎng)絡(luò)中社區(qū)發(fā)現(xiàn)、基于好友關(guān)系為用戶推薦商品或內(nèi)容、社交網(wǎng)絡(luò)中人物影響力的計算、信息在社交網(wǎng)絡(luò)上的傳播模型、虛假信息和機(jī)器人賬號的識別、基于社交網(wǎng)絡(luò)信息對股市、大選以及互聯(lián)網(wǎng)金融行業(yè)中的反欺詐預(yù)測等。

圖片

現(xiàn)實(shí)生活中存在各種各樣的社會網(wǎng)絡(luò),比如人際關(guān)系網(wǎng)、交易網(wǎng)、交通運(yùn)輸網(wǎng)等,對這些網(wǎng)絡(luò)進(jìn)行社區(qū)發(fā)現(xiàn)(community detection)具有極大的意義,如在微博構(gòu)成的人際關(guān)系網(wǎng)絡(luò)中,可以發(fā)現(xiàn)出具有不同興趣愛好、背景的社會團(tuán)體,方便進(jìn)行不同的宣傳策略和投放不同的廣告;在以淘寶為代表的交易網(wǎng)中,不同的社區(qū)代表不同購買力的客戶群體,社區(qū)發(fā)現(xiàn)可以方便運(yùn)營為這些社區(qū)推薦合適的商品。

算法簡介

在社交網(wǎng)絡(luò)中,有的用戶之間的連接較為緊密,有的用戶之間的連接關(guān)系較為稀疏,在這樣的的網(wǎng)絡(luò)中,連接較為緊密的部分可以被看成一個社區(qū),其內(nèi)部的節(jié)點(diǎn)之間有較為緊密的連接,而在兩個社區(qū)間則相對連接較為稀疏,這便稱為社團(tuán)結(jié)構(gòu)。

Louvain算法來自于Vincent等人發(fā)表的文章《Fast unfolding of communities in large networks》,是基于模塊度(modularity)進(jìn)行社區(qū)發(fā)現(xiàn),該算法的優(yōu)點(diǎn)在于速度快,可以在較短時間內(nèi)實(shí)現(xiàn)大規(guī)模網(wǎng)絡(luò)以不同粒度的社區(qū)劃分(這個就對應(yīng)我們的Seurat的聚類參數(shù)resolution),并且無需指定社區(qū)的數(shù)量,當(dāng)模塊度不再增益時候,迭代便自動停止。

圖片

Louvain算法處理大量數(shù)據(jù)的結(jié)果示例

算法簡介

模塊度基本原理

Newman等人在文章《Finding and evaluating community structure in networks》中提出了模塊度(modularity)的概念,用來衡量社區(qū)劃分的好壞。簡單講,如果一個社區(qū)劃分算法能將連接比較稠密的點(diǎn)劃分在一個社區(qū)中,而社區(qū)之間的連接比較稀疏,這樣劃分得到的網(wǎng)絡(luò)模塊度的值就會比較大,模塊度越大的社區(qū)劃分算法性能越好。

——模塊度的計算

圖片

——模塊度簡單實(shí)現(xiàn)

圖片

模塊度的值在[-1,1]之間,若所有的節(jié)點(diǎn)都被劃分到一個社區(qū)內(nèi)部,則此時模塊度為1,若所有的節(jié)點(diǎn)各自為一個社區(qū),則模塊度為-1,文章說當(dāng)模塊度的值在0.3~0.7之間則說明社區(qū)劃分算法的效果很好,Louvain算法的優(yōu)化目標(biāo)為最大化整個數(shù)據(jù)的模塊度。

算法簡介

louvain算法原理

——louvain算法的兩個階段

  • 第一階段——先令每個節(jié)點(diǎn)自己屬于一個社區(qū),此時網(wǎng)絡(luò)中有幾個節(jié)點(diǎn)便有幾個社區(qū),計算此時的模塊度,然后令節(jié)點(diǎn)i不再屬于自己而是和節(jié)點(diǎn)j一個社區(qū),計算此時的模塊度,兩個步驟就使得此時的網(wǎng)絡(luò)出現(xiàn)了模塊度增量,則模塊劃分方法就是將i節(jié)點(diǎn)劃分到使模塊度增量最大且大于0的那個節(jié)點(diǎn)中去;

  • 第二階段——將第一階段劃分出來的社區(qū)聚合為一個節(jié)點(diǎn),重構(gòu)整個網(wǎng)絡(luò);

圖片

louvain算法的步驟

——模塊度增量

圖片

算法實(shí)現(xiàn)

算法實(shí)現(xiàn)

算法流程

圖片

算法實(shí)現(xiàn)

代碼詳解

——計算模塊度

圖片

——計算模塊度增量

圖片

——社區(qū)聚合

圖片

算法實(shí)現(xiàn)

算法測試

——數(shù)據(jù)導(dǎo)入

圖片

——測試結(jié)果

圖片

根據(jù)louvain算法結(jié)果,一共將數(shù)據(jù)“polbooks.gml”劃分成4個社區(qū),劃分后網(wǎng)絡(luò)的模塊度為0.52,在0.3~0.7之間,可見劃分結(jié)果還是比較優(yōu)良。

實(shí)例運(yùn)用

圖片

《權(quán)力的游戲》,是美國HBO電視網(wǎng)制作推出的一部中世紀(jì)史詩奇幻題材的電視劇。該劇改編自美國作家喬治·R·R·馬丁的奇幻小說《冰與火之歌》系列。16年數(shù)學(xué)家 Andrew Beveridge和Jie Shan分析了小說《冰與火之歌》第三部《冰雨的風(fēng)暴》中人物關(guān)系。在文章中介紹了如何通過文本分析和實(shí)體提取構(gòu)建人物關(guān)系的網(wǎng)絡(luò),并使用社交網(wǎng)絡(luò)分析算法對人物關(guān)系網(wǎng)絡(luò)分析找出最重要的角色,最后應(yīng)用社區(qū)發(fā)現(xiàn)算法來找到人物聚類。其中可視化是利用igraph實(shí)現(xiàn),社區(qū)發(fā)現(xiàn)則是利用igraph中實(shí)現(xiàn)的walktrap方法。劃分結(jié)果:

圖片

7 大子網(wǎng)絡(luò)陣營

在這里,本文利用權(quán)利的游戲中角色之間的聯(lián)系緊密產(chǎn)能度收集到的數(shù)據(jù)集,內(nèi)含兩個角色的名字和相互之間對應(yīng)的權(quán)重,利這個數(shù)據(jù)進(jìn)行簡單的可視化工作,并且將louvain算法運(yùn)用到上面,進(jìn)行社區(qū)發(fā)現(xiàn)并且將劃分的子網(wǎng)絡(luò)通過網(wǎng)絡(luò)圖中不同的色彩標(biāo)示出來。

實(shí)例運(yùn)用

數(shù)據(jù)獲取

圖片

——NetworkX

是用Python語言開發(fā)的圖論與復(fù)雜網(wǎng)絡(luò)建模工具,內(nèi)置常用的圖與復(fù)雜網(wǎng)絡(luò)分析算法,可以方便的進(jìn)行復(fù)雜網(wǎng)絡(luò)數(shù)據(jù)分析、仿真建模等工作;支持創(chuàng)建無向圖、有向圖和多重圖;

示例:

圖片

——community

是使用louvain方法進(jìn)行社區(qū)發(fā)現(xiàn)的模塊,在安裝庫的時候注意使用“pip install python-louvain”進(jìn)行安裝。

示例:

圖片

實(shí)例運(yùn)用

數(shù)據(jù)可視化

圖片
圖片

實(shí)例運(yùn)用

調(diào)用Louvain算法

——算法調(diào)用及劃分結(jié)果局部展示

圖片

——劃分后的模塊度

圖片

前面我們說過當(dāng)模塊度的值為0.3-0.7則表示社區(qū)劃分的效果比較好,可見這里的劃分結(jié)果為0.5999說明劃分效果很好。

實(shí)例運(yùn)用

社區(qū)發(fā)現(xiàn)結(jié)果可視化

圖片
圖片

看過《權(quán)游》的人應(yīng)該知道Cersei(瑟后)、Tyrion(小指頭)和Jamie(弒君者)三人是姐弟關(guān)系,其他人物例如Aerys(瘋王)、Tywin(瑟后他爹)、Oberyn(紅毒蛇)、Gregor(魔山),這些都是以Cersei為中心的人物關(guān)系,而我們的社區(qū)發(fā)現(xiàn)算法也成功的將他們劃分到了一個社區(qū)里面,可見louvain算法不僅速度快,而且劃分的準(zhǔn)確性也比較高。

當(dāng)然,這里只是一個例子,10X單細(xì)胞和10X空間轉(zhuǎn)錄組都是運(yùn)用一樣的原理,由此顯示了我們單細(xì)胞的聚類,從而運(yùn)用到下游分析

但是,目前這個算法已經(jīng)暴露了很多不合適的地方,最新的算法leiden慢慢替換了louvain,我們下一篇分享louvain的算法缺陷和leiden的算法原理。

生活很好,有你更好

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容