4.2.7.1.2. 聚类
4.2.7.1.2.1. 集群前端 MDAnalysis.analysis.encore.clustering.cluster
该模块定义了一个函数,作为各种集群算法的前端,对它们进行包装,以允许它们互换使用。
- 作者:
马泰奥·蒂贝蒂,Wter Boomsma,Tone Bengtsen
在 0.16.0 版本加入.
- MDAnalysis.analysis.encore.clustering.cluster.cluster(ensembles, method=<MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative object>, select='name CA', distance_matrix=None, allow_collapsed_result=True, ncores=1, **kwargs)[源代码]
使用一种或多种集群方法对来自一个或多个系综的帧进行集群。该函数可选地将预先计算的距离矩阵作为参数。注意,并不是所有的聚类过程都可以直接作用于距离矩阵,因此对于特定的方法选择,距离矩阵可以被忽略。
- 参数:
ensembles (MDAnalysis.Universe, or list, or list of list thereof) -- 该函数接受单个宇宙对象、宇宙对象列表或宇宙对象列表。如果给出一个单一的宇宙,它只是将轨道上的构象聚集在一起。如果给出一个集合列表,它将合并它们并将它们聚集在一起,跟踪每个构象所属的集合。最后,如果传递一个集合列表,该函数将重复刚才描述的功能--合并外部循环中每个集合的集合。
method (encore.ClusteringMethod or list thereof, optional) -- 来自集群模块的集群类的单个实例或实例列表。将为每种方法运行单独的分析。请注意,可以通过添加同一聚类的不同实例来探索同一聚类方法的不同参数。
select (str, optional) -- MDAnalysis格式的ATOM选择字符串。默认为“NAME CA”
distance_matrix (encore.utils.TriangularMatrix or list thereof, optional) -- 用于聚类的距离矩阵。如果未提供此参数,则将动态计算矩阵。如果提供了多个距离矩阵,则将对每个距离矩阵进行分析。所提供的距离矩阵的数量应与所提供的系综的数量相匹配。
allow_collapsed_result (bool, optional) -- 一个值的列表的返回值是否应该仅折叠为该值。
ncores (int, optional) -- 要使用的最大核心数(默认为1)。
- 返回:
ClustersCollection对象的列表(或可能是单个
ClusteringCollection object if allow_collapsed_result is set to True)
示例
使用一个拓扑文件和两个轨迹将两个集合创建为宇宙对象。所使用的拓扑和轨迹文件是从MDAnalysis测试套件中获得的,用于蛋白质ADK的两种不同模拟。在这里,我们将两个组合组合在一起:
>>> from MDAnalysis import Universe >>> import MDAnalysis.analysis.encore as encore >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 >>> ens1 = Universe(PSF, DCD) >>> ens2 = Universe(PSF, DCD2) >>> cluster_collection = encore.cluster([ens1,ens2]) >>> print cluster_collection
您可以通过显式指定以下方法来更改群集方法的参数:
>>> cluster_collection = encore.cluster( [ens1,ens2], method=encore.AffinityPropagationNative(preference=-2.))
下面的插图使用DBSCAN算法,而不是默认的集群方法:
>>> cluster_collection = encore.cluster( [ens1,ens2], method=encore.DBSCAN())
您还可以在一个调用中组合多个方法::
>>> cluster_collection = encore.cluster( [ens1,ens2], method=[encore.AffinityPropagationNative(preference=-1.), encore.AffinityPropagationNative(preference=-2.)])
除了标准的集群成员身份信息外, cluster_collection 输出跟踪每个构象的原点,因此可以检查不同轨迹在每个簇中的表示方式。这里,为简洁起见,我们只打印前两个集群的成员:
>>> print [cluster.metadata["ensemble_membership"] for cluster in cluster_collection][:2] [array([1, 1, 1, 1, 2]), array([1, 1, 1, 1, 1])]
4.2.7.1.2.2. 集群表示法 MDAnalysis.analysis.encore.clustering.ClusterCollection
该模块包含用于存储集群算法结果的Cluster类和ClusterCollection类。
- 作者:
马泰奥·蒂贝蒂,Wter Boomsma,Tone Bengtsen
在 0.16.0 版本加入.
- class MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster(elem_list=None, centroid=None, idn=None, metadata=None)[源代码]
具有质心的簇的通用簇类。
- id
群集ID号。对ClustersCollection类有用
- 类型:
集成
- metadata
包含集群元素元数据的列表的dict或numpy.array。Iterable返回的元素数量必须与属于集群的元素数量相同。
- 类型:
可迭代的
- size
元素数。
- 类型:
集成
- centroid
簇形心。
- 类型:
Element对象
- elements
包含簇元素的数组。
- 类型:
numpy.array
- 类构造函数。如果elem_list为NONE,则创建一个空集群
而其余的论点则被忽略。
- 参数:
elem_list (numpy.array or None) -- 簇元的NumPy数组
centroid (None or element object) -- 质心
idn (int) -- 集群ID
metadata (iterable) -- 元数据,每个集群元素一个值。迭代数的长度必须与元素数组的长度相同。
- class MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection(elements=None, metadata=None)[源代码]
Clusters集合类;此类表示完全群集运行的结果。它存储一组定义为encore.clustering.Clustering.Cluster对象的集群。
- clusters
属于群集集合一部分的群集对象列表
- 类型:
列表
类构造函数。如果Elements为None,则将创建一个空的簇集合。否则,构造函数将INT的迭代数作为输入,例如:
[A,b,c,c,...,z,z]
变量a、b、c、…、z是集群质心,这里是集群元素编号(即,3表示用于集群的有序输入的第四个元素)。该数组将簇元素(其隐含地与数组中的位置相关联)与质心之间的对应关系映射,即定义簇。例如:
[1、1、1、4、4、5]
表示元素0、1、2形成以1为质心的簇,元素3和4形成以4为质心的簇,元素5具有其自己的簇。
- 参数:
elements (iterable of ints or None) -- 聚类结果。有关详细信息,请参阅前面的描述
metadata ({str:list, str:list,...} or None) -- 数据元素的元数据。该列表必须与元素数组的大小相同,每个元素一个值。
4.2.7.1.2.3. 集群前端 MDAnalysis.analysis.encore.clustering.ClusteringMethod
该模块定义了用于接口到各种集群算法的类。其中一个已经在本地实现,并且将始终可用,而其他一些只有在安装了SCRICKIT-LEARN的情况下才可用
- 作者:
马泰奥·蒂贝蒂,Wter Boomsma,Tone Bengtsen
在 0.16.0 版本加入.
- class MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagation(damping=0.9, preference=-1.0, max_iter=500, convergence_iter=50, **kwargs)[源代码]
接口到在skLearning中实现的亲和力传播集群过程。
- 参数:
damping (float, optional) -- 衰减系数(默认为0.9)。用于群集的相似性传播的参数。
preference (float, optional) -- 用于群集的相似性传播算法中使用的首选参数(默认为-1.0)。首选项值越高,聚类越多,而首选项越低,聚类数越少。
max_iter (int, optional) -- 关联传播的最大迭代次数(默认为500)。
convergence_iter (int, optional) -- 达到收敛所需的最小不变迭代次数(默认为50)。参数用于聚类的亲和度传播。
**kwargs (optional) -- 将其他关键字参数传递给
sklearn.cluster.AffinityPropagation
。
- class MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative(damping=0.9, preference=-1.0, max_iter=500, convergence_iter=50, add_noise=True)[源代码]
接口到本机实现的亲和性传播过程。
- 参数:
damping (float, optional) -- 衰减系数(默认为0.9)。用于群集的相似性传播的参数。
preference (float, optional) -- 用于群集的相似性传播算法中使用的首选参数(默认为-1.0)。首选项值越高,聚类越多,而首选项越低,聚类数越少。
max_iter (int, optional) -- 关联传播的最大迭代次数(默认为500)。
convergence_iter (int, optional) -- 达到收敛所需的最小不变迭代次数(默认为50)。参数用于聚类的亲和度传播。
add_noise (bool, optional) -- 在运行群集之前将噪声应用于相似性矩阵(默认为True)
- class MDAnalysis.analysis.encore.clustering.ClusteringMethod.DBSCAN(eps=0.5, min_samples=5, algorithm='auto', leaf_size=30, **kwargs)[源代码]
接口到在skLearning中实现的DBSCAN集群过程。
- 参数:
eps (float, optional (default = 0.5)) -- 两个样本之间的最大距离,以使它们被视为在同一邻域中。
min_samples (int, optional (default = 5)) -- 被视为核心点的邻域中的样本数(或总权重)。这包括点本身。
algorithm ({'auto', 'ball_tree', 'kd_tree', 'brute'}, optional) -- NearestNeighbors模块用来计算逐点距离和查找最近邻居的算法。有关详细信息,请参阅NearestNeighbors模块文档。
leaf_size (int, optional (default = 30)) -- 传递给BallTree或cKDTree的叶大小。这可能会影响构建和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。
sample_weight (array, shape (n_samples,), optional) -- 每个样本的重量,以便至少具有重量的样本
min_samples
本身就是核心样品;具有负重的样品可能会抑制其EPS邻居成为核心样品。请注意,权重是绝对的,默认为1。
- class MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans(n_clusters, max_iter=300, n_init=10, init='k-means++', algorithm='auto', tol=0.0001, verbose=False, random_state=None, copy_x=True, **kwargs)[源代码]
- 参数:
n_clusters (int) -- 要形成的簇数以及要生成的质心数。
max_iter (int, optional (default 300)) -- 运行的k-Means算法的最大迭代次数。
n_init (int, optional (default 10)) -- K-Means算法将使用不同的质心种子运行的次数。就惯性而言,最终结果将是n_init连续运行的最佳输出。
init ({'k-means++', 'random', or ndarray, or a callable}, optional) -- 初始化方法,默认为‘k-Means++’:‘k-Means++’:以智能的方式为k-Means聚类选择初始聚类中心,以加快收敛。有关更多详细信息,请参见k_init中的注释部分。‘随机’:根据数据估计的均值和方差,从一个高斯函数生成k个质心。如果通过ndarray,则该ndarray的形状应为(n_Clusters,n_Feature)并给出初始中心。如果传递了Callable,它应该接受参数X、k和一个随机状态,并返回一个初始化。
tol (float, optional (default 1e-4)) -- 在宣布收敛之前结果中的相对增量。
verbose (boolean, optional (default False)) -- 冗长模式。
random_state (integer or numpy.RandomState, optional) -- 用于初始化中心的生成器。如果给定了一个整数,它将修复种子。默认为全局数字随机数生成器。
copy_x (boolean, optional) -- 在预计算距离时,首先将数据居中比较准确。如果Copy_x为True,则不修改原始数据。如果为False,则修改原始数据,并在函数返回之前将其放回原处,但通过减去数据平均值,然后再将其相加,可能会引入微小的数值差异。
- accepts_distance_matrix = False
KMeans集群程序的接口,该程序是在skLearning中实现的。
- MDAnalysis.analysis.encore.clustering.ClusteringMethod.encode_centroid_info(clusters, cluster_centers_indices)[源代码]
如ClusterCollection的文档中所述,调整聚类索引以包括质心信息
4.2.7.1.2.4. 聚类算法
以下群集算法始终可用:
Cython包装器,用于C语言实现的亲和力扰动聚类算法。
- 作者:
马泰奥·蒂贝蒂,Wter Boomsma,Tone Bengtsen
- MDAnalysis.analysis.encore.clustering.affinityprop.AffinityPropagation(s, preference, lam, max_iterations, convergence, noise=1)
亲和传播聚类算法。这个类是一个围绕亲和力传播算法的Cython包装器,它被实现为一个C库(参见ap.c)。文中描述了该算法的实现过程:
通过在数据点之间传递消息进行群集。Brendan J.Frey和Delbert Dueck,多伦多科学大学,315,972-976,2007年2月
- 参数:
s (encore.utils.TriangularMatrix object) -- 包含每对聚类元素的相似性值的三角矩阵。请注意,当前实现不支持非对称值(即假定相似性(a,b)等于相似性(b,a))
preference (numpy.array of floats or float) -- 首选项值,用于确定聚类的数量。如果给出了单个值,则所有首选项值都设置为该值。否则,列表用于设置首选项值(每个元素一个值,因此列表的大小必须与元素的数量相同)
lam (float) -- 定义在每次迭代时应用于解的阻尼量的浮点值。必须是]0,1]
max_iterations (int) -- 最大迭代次数
convergence (int) -- 为了达到收敛,聚类中心必须保持不变的迭代次数
noise (int) -- 是否将噪波应用于输入的矩阵,这样就没有相等的值。1代表是,0代表不是。
- 返回:
元素 --集群分配的元素列表,encore.utils.ClustersCollection可以使用它来生成集群对象。有关更多详细信息,请参阅这些类。
- 返回类型: