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
上述函数返回一个Tree cluster对象。这个对象包含节点,其中项目的数量被聚类为行或列。
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-medians聚类
这是另一种聚类算法,它计算每个聚类的平均值以确定其中心点。
K-medoids聚类法
这种方法是基于一个给定的项目集,使用距离矩阵和用户传递的聚类数量。
Consider the distance matrix as defined below −
>>> distance = array([[1,2,3],[4,5,6],[3,5,7]])
我们可以使用下面的命令计算k-medoids聚类–
>>> 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、坐标、成分和特征值。让我们来了解一下这个概念的基本情况。
>>> 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.]