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.]
廣告
© . All rights reserved.