snfpy是一个用于执行相似性网络融合的python工具箱。

snfp的Python项目详细描述


snfpy

这个包提供了相似性网络融合(SNF)的Python实现,SNF是一种将多个数据源组合成一个表示示例关系的图的技术

Build StatusCodecovDocumentation StatusLicense

目录

如果你知道你要去哪里,可以跳到前面:

要求和安装

这个包需要python 3.5或更高版本。 假设您拥有正确版本的python,则可以通过打开命令终端并运行以下命令来安装此软件包:

git clone https://github.com/rmarkello/snfpy.git
cd snfpy
python setup.py install

您可以使用以下命令安装pypi的最新版本:

pip install snfpy

目的

相似网络融合是Wang et al., 2014, Nature Methods最初提出的一种技术,用于将来自不同来源的数据组合成一组共享的样本。 该过程通过为每个数据源构造这些样本的网络来工作,这些网络表示每个样本与所有其他样本的相似性,然后将这些网络融合在一起。 将该方法应用于遗传学数据的原始论文中的这个图提供了一个很好的演示:

Similarity network fusion

相似网络生成和融合过程使用K-nearest neighbors过程来降低样本之间较弱关系的权重。 然而,通过融合过程,在数据源之间保持一致的弱关系。 有关SNF背后的数学的更多信息,您可以阅读original paper或查看reference documentation

用法

有~3个函数可用于构造mostsnf工作流。 为了演示,我们可以使用snfpy分布提供的示例数据集:

>>>fromsnfimportdatasets>>>digits=datasets.load_digits()>>>digits.keys()dict_keys(['data','labels'])

digits数据集由600个样本组成,这些样本分布在四种数据类型上,每种数据类型有76、240、216和47个特征;这些数据可以通过digits.data

>>>forarrindigits.data:...print(arr.shape)(600,76)(600,240)(600,216)(600,47)

数据集还附带一组标签,将样本分组为三个类别(0、1或2)之一;这些标签可以通过digits.labels访问。 我们可以看到每组有200个样本:

importnumpyasnp>>>groups,samples=np.unique(digits.labels,return_counts=True)>>>forgrp,countinzip(groups,samples):...print('Group {:.0f}: {} samples'.format(grp,count))Group0:200samplesGroup1:200samplesGroup2:200samples

SNF的第一步是将这些数据数组转换为相似(或“相似”)网络。 为此,我们将数据数组提供给snf.make_affinity()函数:

>>>importsnf>>>affinity_networks=snf.make_affinity(digits.data,metric='euclidean',K=20,mu=0.5)

提供给此函数的参数(metricKmu)都在如何构造相似网络中起作用。 参数metric控制构建网络时使用的距离函数。 然而,距离网络和相似网络是互逆的,所以我们将它们转换成另一个。 为此,我们对距离数组应用mu加权K-近邻内核(有关更多数学信息,请参见^{} docstring)。

一旦我们有了相似网络,我们就可以将它们与snf结合起来:

>>>fused_network=snf.snf(affinity_networks,K=20)

融合后的网络可以进行其他分析(比如聚类!). 如果我们想对网络进行集群,我们可以尝试使用snf.get_n_clusters()来确定要形成的集群的“最佳”数量。 此函数返回簇的顶部two“最优”数(通过特征间隙方法估计):

>>>best,second=snf.get_n_clusters(fused_network)>>>best,second(3,4)

然后,我们可以使用光谱聚类对网络进行聚类,并将得到的标签与测试数据集提供的“真”标签进行比较:

>>>fromsklearn.clusterimportspectral_clustering>>>fromsklearn.metricsimportv_measure_score>>>labels=spectral_clustering(fused_network,n_clusters=best)>>>v_measure_score(labels,digits.labels)0.9734300455833589

这里使用的度量(v_measure_score)范围从0到1,其中1表示派生标签和真标签之间完全重叠,0表示没有重叠。 我们发现,0.97表明snf融合网络聚类结果是高度准确的!

当然,对于其他数据集,您的里程数可能会有所不同,但这应该足以让您开始! 有关更详细的示例和其他用途,请查看我们的documentation

如何参与

我们很高兴欢迎新的贡献者! 如果是你对参与感兴趣,你应该从阅读我们的contributing guidelinescode of conduct开始。 一旦你完成了,看看我们的issues看看是否有什么你可能喜欢的工作。 或者,如果您发现了一个bug,遇到了一个问题,或者有一个问题,请创建一个新的问题,并提供一些相关信息

致谢

此代码是在RMatlab中实现的原始相似网络融合代码的翻译。 因此,如果您使用此代码,请(1)提供回GitHub存储库的链接以及使用的代码版本,以及(2)引用原始的相似性网络融合文件:

Wang, B., Mezlini, A. M., Demir, F., Fiume, M., Tu, Z., Brudno, M., Haibe-Kains, B., &
Goldenberg, A. (2014). Similarity network fusion for aggregating data types on a genomic scale.
Nature Methods, 11(3), 333.

许可证信息

这段代码从original SNF code部分翻译而来,因此作为LGPLv3下的派生代码发布。 完整的许可证可以在snfpy发行版的LICENSE文件中找到。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Linux的java字符串命令   java parseInt和viewflipper布局问题   java正则表达式来平衡括号   mysql与数据库的Java连接   java将JFreeChart系列名称映射到系列索引   多线程如何使用信号量在Java中对哲学家进行编码?   oop特殊变量“this”如何准确地知道在JAVA程序中引用哪个对象?   Android上的java getType   当前值/单元格POI上的java Excel公式   代码中有错误(java.awt.image.RasterFormatException)   java改造2,参数转换   未找到java JSF 2 Ajax属性   JAVArmi。服务器在OpenJDK 8中,useCodebaseOnly默认为true   java如何用final实现静态?   对付Java语法冗长的最佳IDE宏工具?   java@Transactional不回滚