Biopython - 聚类分析



一般来说,聚类分析是将一组对象分组到同一组中。这个概念主要用于数据挖掘、统计数据分析、机器学习、模式识别、图像分析、生物信息学等领域。它可以通过各种算法来实现,以了解聚类如何在不同的分析中广泛应用。

根据生物信息学,聚类分析主要用于基因表达数据分析,以查找具有相似基因表达的基因组。

在本章中,我们将查看 Biopython 中重要的算法,以了解在真实数据集上进行聚类分析的基础知识。

Biopython 使用 Bio.Cluster 模块来实现所有算法。它支持以下算法:

  • 层次聚类
  • K 均值聚类
  • 自组织映射
  • 主成分分析

让我们简要介绍一下上述算法。

层次聚类

层次聚类用于通过距离度量将每个节点与其最近邻连接起来并创建一个聚类。Bio.Cluster 节点具有三个属性:左、右和距离。让我们创建一个简单的聚类,如下所示:

>>> from Bio.Cluster import Node 
>>> n = Node(1,10) 
>>> n.left = 11 
>>> n.right = 0 
>>> n.distance = 1 
>>> print(n) 
(11, 0): 1

如果要构建基于树的聚类,请使用以下命令:

>>> n1 = [Node(1, 2, 0.2), Node(0, -1, 0.5)] >>> n1_tree = Tree(n1) 
>>> print(n1_tree) 
(1, 2): 0.2 
(0, -1): 0.5 
>>> print(n1_tree[0]) 
(1, 2): 0.2

让我们使用 Bio.Cluster 模块执行层次聚类。

假设距离在一个数组中定义。

>>> import numpy as np 
>>> distance = array([[1,2,3],[4,5,6],[3,5,7]])

现在将距离数组添加到树状聚类中。

>>> from Bio.Cluster import treecluster 
>>> cluster = treecluster(distance) 
>>> print(cluster) 
(2, 1): 0.666667 
(-1, 0): 9.66667

上述函数返回一个树状聚类对象。此对象包含节点,其中项目数量被聚类为行或列。

K 均值聚类

这是一种分区算法,分为 k 均值、中位数和中心点聚类。让我们简要了解每种聚类。

K 均值聚类

这种方法在数据挖掘中很流行。该算法的目标是在数据中查找组,组的数量由变量 K 表示。

该算法迭代地将每个数据点分配给 K 个组中的一个,基于提供的特征。数据点基于特征相似性进行聚类。

>>> from Bio.Cluster import kcluster 
>>> from numpy import array 
>>> data = array([[1, 2], [3, 4], [5, 6]]) 
>>> clusterid, error,found = kcluster(data) 
>>> print(clusterid) [0 0 1] 
>>> print(found) 
1

K 中位数聚类

这是另一种聚类算法,它计算每个聚类的平均值以确定其质心。

K 中心点聚类

这种方法基于给定的项目集,使用用户传递的距离矩阵和聚类数。

将距离矩阵定义如下:

>>> distance = array([[1,2,3],[4,5,6],[3,5,7]])

我们可以使用以下命令计算 k 中心点聚类:

>>> from Bio.Cluster import kmedoids 
>>> clusterid, error, found = kmedoids(distance)

让我们考虑一个例子。

kcluster 函数将数据矩阵作为输入,而不是 Seq 实例。您需要将序列转换为矩阵并将其提供给 kcluster 函数。

将数据转换为仅包含数值元素的矩阵的一种方法是使用 **numpy.fromstring** 函数。它基本上将序列中的每个字母转换为其 ASCII 等价物。

这将创建一个编码序列的二维数组,kcluster 函数可以识别并使用它来对序列进行聚类。

>>> from Bio.Cluster import kcluster 
>>> import numpy as np 
>>> sequence = [ 'AGCT','CGTA','AAGT','TCCG'] 
>>> matrix = np.asarray([np.fromstring(s, dtype=np.uint8) for s in sequence]) 
>>> clusterid,error,found = kcluster(matrix) 
>>> print(clusterid) [1 0 0 1]

自组织映射

这种方法是一种人工神经网络。它由 Kohonen 开发,通常称为 Kohonen 映射。它根据矩形拓扑将项目组织成聚类。

让我们使用与以下相同的数组距离创建一个简单的聚类:

>>> from Bio.Cluster import somcluster 
>>> from numpy import array 
>>> data = array([[1, 2], [3, 4], [5, 6]]) 
>>> clusterid,map = somcluster(data) 

>>> print(map) 
[[[-1.36032469 0.38667395]] 
   [[-0.41170578 1.35295911]]] 

>>> print(clusterid) 
[[1 0]
   [1 0]
   [1 0]]

这里,**clusterid** 是一个有两列的数组,其中行数等于已聚类的项目数,**data** 是一个具有行或列维度的数组。

主成分分析

主成分分析可用于可视化高维数据。这是一种使用线性代数和统计学的简单矩阵运算来计算原始数据投影到相同或更少维度的的方法。

主成分分析返回一个元组 columnmean、coordinates、components 和 eigenvalues。让我们了解一下这个概念的基础知识。

>>> from numpy import array 
>>> from numpy import mean 
>>> from numpy import cov 
>>> from numpy.linalg import eig 

# define a matrix 
>>> A = array([[1, 2], [3, 4], [5, 6]]) 

>>> print(A) 
[[1 2]
   [3 4]
   [5 6]] 
 
# calculate the mean of each column 
>>> M = mean(A.T, axis = 1) 
>>> print(M) 
[ 3. 4.] 

# center columns by subtracting column means 
>>> C = A - M

>>> print(C) 
[[-2. -2.]
   [ 0. 0.]
   [ 2. 2.]] 

# calculate covariance matrix of centered matrix 
>>> V = cov(C.T) 

>>> print(V) 
[[ 4. 4.]
   [ 4. 4.]] 
 
# eigendecomposition of covariance matrix 
>>> values, vectors = eig(V) 

>>> print(vectors) 
[[ 0.70710678 -0.70710678]
   [ 0.70710678 0.70710678]] 
 
>>> print(values) 
[ 8. 0.]

让我们将相同的矩形矩阵数据应用于 Bio.Cluster 模块,如下所示:

>>> from Bio.Cluster import pca 
>>> from numpy import array 
>>> data = array([[1, 2], [3, 4], [5, 6]]) 
>>> columnmean, coordinates, components, eigenvalues = pca(data) 
>>> print(columnmean) 
[ 3. 4.] 
>>> print(coordinates) 
[[-2.82842712 0. ]
   [ 0.         0. ]
   [ 2.82842712 0. ]] 
>>> print(components) 
[[ 0.70710678 0.70710678]
   [ 0.70710678 -0.70710678]] 
>>> print(eigenvalues) 
[ 4. 0.]
广告