Biopython - Clusteranalyse

Im Allgemeinen gruppiert die Clusteranalyse eine Reihe von Objekten in derselben Gruppe. Dieses Konzept wird hauptsächlich beim Data Mining, bei der statistischen Datenanalyse, beim maschinellen Lernen, bei der Mustererkennung, bei der Bildanalyse, bei der Bioinformatik usw. verwendet. Es kann durch verschiedene Algorithmen erreicht werden, um zu verstehen, wie weit der Cluster in verschiedenen Analysen verwendet wird.

Laut Bioinformatics wird die Clusteranalyse hauptsächlich in der Analyse von Genexpressionsdaten verwendet, um Gruppen von Genen mit ähnlicher Genexpression zu finden.

In diesem Kapitel werden wichtige Algorithmen in Biopython untersucht, um die Grundlagen des Clustering in einem realen Datensatz zu verstehen.

Biopython verwendet das Bio.Cluster-Modul zur Implementierung aller Algorithmen. Es unterstützt die folgenden Algorithmen:

  • Hierarchisches Clustering
  • K - Clustering
  • Selbstorganisierende Karten
  • Hauptkomponentenanalyse

Lassen Sie uns eine kurze Einführung in die oben genannten Algorithmen geben.

Hierarchisches Clustering

Hierarchisches Clustering wird verwendet, um jeden Knoten durch ein Abstandsmaß mit seinem nächsten Nachbarn zu verbinden und einen Cluster zu erstellen. Der Bio.Cluster-Knoten hat drei Attribute: links, rechts und Abstand. Erstellen wir einen einfachen Cluster wie unten gezeigt -

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

Wenn Sie ein baumbasiertes Clustering erstellen möchten, verwenden Sie den folgenden Befehl:

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

Lassen Sie uns mit dem Bio.Cluster-Modul hierarchisches Clustering durchführen.

Beachten Sie, dass der Abstand in einem Array definiert ist.

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

Fügen Sie nun das Distanzarray im Baumcluster hinzu.

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

Die obige Funktion gibt ein Tree-Cluster-Objekt zurück. Dieses Objekt enthält Knoten, bei denen die Anzahl der Elemente als Zeilen oder Spalten gruppiert ist.

K - Clustering

Es ist eine Art Partitionierungsalgorithmus und wird in k - Mittelwerte, Mediane und Medoidencluster unterteilt. Lassen Sie uns die einzelnen Cluster kurz verstehen.

K-bedeutet Clustering

Dieser Ansatz ist im Data Mining beliebt. Das Ziel dieses Algorithmus ist es, Gruppen in den Daten zu finden, wobei die Anzahl der Gruppen durch die Variable K dargestellt wird.

Der Algorithmus arbeitet iterativ, um jeden Datenpunkt basierend auf den bereitgestellten Funktionen einer der K Gruppen zuzuweisen. Datenpunkte werden basierend auf der Ähnlichkeit der Merkmale gruppiert.

>>> 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-Mediane Clustering

Es ist eine andere Art von Clustering-Algorithmus, der den Mittelwert für jeden Cluster berechnet, um seinen Schwerpunkt zu bestimmen.

K-Medoide Clustering

Dieser Ansatz basiert auf einem bestimmten Satz von Elementen unter Verwendung der Abstandsmatrix und der Anzahl der vom Benutzer übergebenen Cluster.

Betrachten Sie die unten definierte Distanzmatrix -

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

Wir können die Clusterbildung von k-Medoiden mit dem folgenden Befehl berechnen:

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

Betrachten wir ein Beispiel.

Die kcluster-Funktion verwendet eine Datenmatrix als Eingabe und keine Seq-Instanzen. Sie müssen Ihre Sequenzen in eine Matrix konvertieren und diese für die kcluster-Funktion bereitstellen.

Eine Möglichkeit, die Daten in eine Matrix zu konvertieren, die nur numerische Elemente enthält, ist die Verwendung von numpy.fromstringFunktion. Grundsätzlich übersetzt es jeden Buchstaben in einer Sequenz in sein ASCII-Gegenstück.

Dadurch wird ein 2D-Array von codierten Sequenzen erstellt, die von der kcluster-Funktion erkannt und zum Clustering Ihrer Sequenzen verwendet werden.

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

Selbstorganisierende Karten

Dieser Ansatz ist eine Art künstliches neuronales Netzwerk. Es wird von Kohonen entwickelt und oft als Kohonen-Karte bezeichnet. Es organisiert Elemente basierend auf der rechteckigen Topologie in Clustern.

Erstellen wir einen einfachen Cluster mit demselben Array-Abstand wie unten gezeigt -

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

Hier, clusterid ist ein Array mit zwei Spalten, wobei die Anzahl der Zeilen der Anzahl der Elemente entspricht, die geclustert wurden, und data ist ein Array mit Dimensionen entweder Zeilen oder Spalten.

Hauptkomponentenanalyse

Die Hauptkomponentenanalyse ist nützlich, um hochdimensionale Daten zu visualisieren. Es ist eine Methode, die einfache Matrixoperationen aus linearer Algebra und Statistik verwendet, um eine Projektion der Originaldaten in dieselbe Anzahl oder weniger Dimensionen zu berechnen.

Die Hauptkomponentenanalyse gibt ein Tupelspaltenmittel, Koordinaten, Komponenten und Eigenwerte zurück. Lassen Sie uns die Grundlagen dieses Konzepts untersuchen.

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

Wenden wir die gleichen rechteckigen Matrixdaten auf das Bio.Cluster-Modul an, wie unten definiert -

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