Biopython 简明教程

Biopython - Cluster Analysis

一般来讲,聚类分析会将一堆物体归为同一组。这个概念主要应用于数据挖掘、统计数据分析、机器学习、模式识别、图像分析、生物信息学等领域。我们可以通过各种算法来理解聚类在不同分析中的广泛应用。

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

在本章中,我们将了解 Biopython 中的重要算法,以理解真实数据集上聚类的基本原理。

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

  1. Hierarchical Clustering

  2. K - Clustering

  3. Self-Organizing Maps

  4. Principal Component Analysis

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

Hierarchical Clustering

层级聚类用于通过距离测量将每个节点与其最近邻节点相连,并创建一个簇。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 - Clustering

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

K-means Clustering

这种方法在数据挖掘中很流行。此算法的目标是找出数据中的组,其中组的数量由变量 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-medians Clustering

它是一种其他类型的聚类算法,该算法计算每个簇的均值以确定其质心。

K-medoids Clustering

此方法基于给定的一组项目,使用用户传递的距离矩阵和簇数。

考虑如下定义的距离矩阵 −

>>> 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]

Self-Organizing Maps

这种方法是一种人工神经网络。它是由 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 是一个具有行或列维度的数组。

Principal Component Analysis

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

主成分分析返回一个包含列均值、坐标、组件和特征值的元组。让我们了解一下这一概念的基础知识。

>>> 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.]

让我们将相同的 rectangular 矩阵数据应用于如下定义的 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.]