Advertisement

10X单细胞(10X空间转录组)聚类算法之Louvain

阅读量:

hello, 大家好,在之前的文章中我们已经介绍了10X单细胞和10X空间转录组的降维算法,并询问大家是否掌握了这些方法的应用。今天我们将重点讲解默认聚类算法Louvain的相关内容。Louvain算法是单细胞分析领域最常用的一种聚类方法之一,在Seurat/Scanpy/RaceID等主流工具中都采用了该算法作为默认选项。那么让我们来深入探讨这一聚类方法的基本原理与应用要点。为了更好地理解这一算法的核心思想与操作步骤,在下面我们将通过一个具体的案例来进行详细阐述和实践操作指导

社会网络(social network)是是由许多节点构成的一种社会结构,节点通常是指个人或组织,社会网络代表各种社会关系,社会网络关注的是人们之间的互动和联系,社会互动会影响人们的社会行为。对于社交网络的分析和研究范围很广,例如在社交网络中社区发现、基于好友关系为用户推荐商品或内容、社交网络中人物影响力的计算、信息在社交网络上的传播模型、虚假信息和机器人账号的识别、基于社交网络信息对股市、大选以及互联网金融行业中的反欺诈预测等。

现实中多种多样的社会网络系统存在于我们的日常生活中。例如人际关系网、交易网以及交通运输网等类型各有特色。对于这些网络而言进行社区发现(community detection)具有重要意义:以微博为例构成的关系网络中能够识别出不同兴趣爱好的人群群体,并通过这种划分有助于制定差异化的营销策略,并精准投放相应的广告信息;针对像淘宝这样的交易平台而言每个社区都代表着特定的客户群体因此通过社区发现能够更好地为各个群体推荐适合的商品从而提高运营效率。

算法简介

在社交网络中有一些节点之间的联系较为紧密而另一些节点之间的联系则较为稀少这些联系通常被统称为边或者链接在一个这样的网络系统中那些联系密集的部分能够被抽象为一个社群其中内部各个节点之间通过大量直接相连而与其他社群间的节点之间则呈现出较少直接联系这种相互作用的方式即构成了社会结构中的社团组织

该算法源自Vincent及其团队所著的文章《Fast unfolding of communities in large networks》,主要依据模块度(modularity)来进行社区识别。其显著优势在于运行速度极快,在合理时间内能完成对大规模网络按不同层次划分进行的有效社区识别;此外该方法具有高度灵活性特点,在无需预先设定具体的群体数量前提下(当模块度指标不再提升时程序自然终止),即可通过迭代运算自动生成合理的群体划分结果

Louvain算法处理大量数据的结果示例

算法简介

模块度基本原理

Newman等人在《Finding and evaluating community structure in networks》一文中首次定义了模块度(modularity)这一指标,并将其作为衡量一个社区划分质量的重要标准。简单而言,在能够有效将网络中具有较高内部连接密度的节点聚合成同一群体的前提下,“模7型”的大小越大,则该社区划分方法所具有的识别能力就越强

——模块度的计算

——模块度简单实现

模块度值通常在-1到1之间,在极端情况下能够反映网络结构的不同特性。具体而言,在所有节点都被分配到同一个社区中时,该指标达到最大值1;而当每个节点单独成为一个社区时,则达到最小值-1。研究表明,当模块度值落在0.3至0.7之间时,则表明该社区划分算法具有良好的效果。Louvain算法通过优化过程最大化数据集的整体模块度。

算法简介

louvain算法原理

——louvain算法的两个阶段

第一阶段——设定初始状态时每个节点独立成一个社区,则当网络中有n个节点时也会有n个独立社区。随后计算初始状态下的网络模块度值。接着将节点i从自身所在的社区中分离出来,并将其与节点j合并至同一社区中重新计算模块度值。上述两个步骤共同导致了模块度的增加量,并据此确定最优的划分方法:即把i分配到能带来最大且正向增量的那个邻居。

第二阶段——将第一阶段划分出来的社区聚合为一个节点,重构整个网络;

louvain算法的步骤

——模块度增量

算法实现

算法实现
算法流程
算法实现
代码详解

——计算模块度

——计算模块度增量

——社区聚合

算法实现

算法测试

——数据导入

——测试结果

基于louvain算法的结果显示, 总共将数据'polbooks.gml'划分为4个社区, 划分后所得网络模块度值为0.52, 位于区间[0.3, 0.7]内, 显示出该划分结果依然具有较高的质量

实例运用

《权力的游戏》,是由美国HBO电视网制作的一部以中世纪背景为主题的奇幻故事电视剧。这部剧作源自美国作家乔治·R·R·马丁创作的同名奇幻小说作品集《冰与火之歌》。16年,数学家 Andrew Beveridge和Jie Shan致力于研究小说《冰与火之歌》第三部《冰雨的风暴》中的角色互动关系。他们在文章中阐述了一种通过文本分析及实体识别技术构建人物关系网络的方法,并运用社交网络分析算法对这一网络进行深入挖掘,以识别出故事中最关键的角色,最终通过社区发现算法完成了角色聚类任务。在数据可视化方面,本研究采用了igraph工具进行绘图;而社区发现则采用igraph中的walktrap方法。

7 大子网络阵营

在这里,本文基于游戏中的角色关系数据集,该数据集包含两个角色名称及其对应的重要程度信息,通过这些数据进行直观展示,并进一步采用Louvain算法对上述数据进行分析,最终识别社会网络中的社群结构并用不同颜色标注子网络

实例运用

数据获取

——NetworkX

基于Python语言开发的图论与复杂网络建模工具集常见图与复杂网络分析算法于一身,并可实现高效的复杂网络数据分析、仿真建模等任务;该工具能够生成无向图、有向图以及多重图等各类基础网络结构。

示例:

——community

采用Louvain算法实现社区发现功能的模块,在安装Python库时务必采用pip命令安装'python-louvain'。

示例:

实例运用

数据可视化

实例运用

调用Louvain算法

——算法调用及划分结果局部展示

——划分后的模块度

曾提到当Module的值介于0.3至0.7时表明Community划分的效果较为理想。可以看出该Partition的模块度值为约0.6(精确到小数点后四位)显示了良好的划分效果。

实例运用

社区发现结果可视化

看过《权力的游戏》的人应该都熟悉瑟曦、小指头以及弑君者这三兄弟是兄妹关系这一事实。除此之外还有疯王阿erys 父亲Tywin 蛇精Oberyn以及魔山Gregor他们都围绕着瑟曦展开了一系列的关系网络。我们的社区发现算法成功地将他们分到同一个社区中由此可见Louvain算法不仅运行迅速而且分类准确。

举个例子来说吧,在这个案例中,“10X单细胞技术和10X空间转录组测序都采用了同样的技术基础”,这揭示了一个重要的特征——我们的单细胞样本聚类能力非常强,并因此在后续分析中发挥了重要作用。

然而该算法存在诸多不尽如人意之处 而随着研究的发展 leiden算法逐渐取代了louvain成为更优的选择 我们将在下期深入探讨louvain算法存在的缺陷及其被leiden算法取代的原因 同时梳理leiden算法的基本原理与应用价值

生活很好,有你更好

全部评论 (0)

还没有任何评论哟~