Biopython - analiza skupień

Ogólnie rzecz biorąc, Analiza skupień polega na grupowaniu zestawu obiektów w tej samej grupie. Pojęcie to jest wykorzystywane głównie w eksploracji danych, statystycznej analizie danych, uczeniu maszynowym, rozpoznawaniu wzorców, analizie obrazu, bioinformatyce itp. Można to osiągnąć za pomocą różnych algorytmów, aby zrozumieć, w jaki sposób klaster jest szeroko stosowany w różnych analizach.

Według Bioinformatics analiza skupień jest stosowana głównie w analizie danych dotyczących ekspresji genów w celu znalezienia grup genów o podobnej ekspresji genów.

W tym rozdziale przyjrzymy się ważnym algorytmom w Biopythonie, aby zrozumieć podstawy tworzenia klastrów na rzeczywistym zbiorze danych.

Biopython używa modułu Bio.Cluster do implementacji wszystkich algorytmów. Obsługuje następujące algorytmy -

  • Klastrowanie hierarchiczne
  • K - Klastrowanie
  • Mapy samoorganizujące się
  • Analiza głównych składowych

Przedstawmy krótkie wprowadzenie do powyższych algorytmów.

Klastrowanie hierarchiczne

Klastrowanie hierarchiczne jest używane do łączenia każdego węzła według miary odległości z najbliższym sąsiadem i tworzenia klastra. Węzeł Bio.Cluster ma trzy atrybuty: lewy, prawy i odległość. Utwórzmy prosty klaster, jak pokazano poniżej -

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

Jeśli chcesz skonstruować klastrowanie oparte na drzewie, użyj poniższego polecenia -

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

Wykonajmy hierarchiczne grupowanie za pomocą modułu Bio.Cluster.

Rozważmy, że odległość jest zdefiniowana w tablicy.

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

Teraz dodaj tablicę odległości w grupie drzew.

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

Powyższa funkcja zwraca obiekt klastra Tree. Ten obiekt zawiera węzły, w których liczba elementów jest zgrupowana jako wiersze lub kolumny.

K - Klastrowanie

Jest to rodzaj algorytmu partycjonowania, który dzieli się na k - średnie, mediany i skupienia medoidów. Przyjrzyjmy się pokrótce każdemu z klastrów.

Grupowanie środków K

To podejście jest popularne w eksploracji danych. Celem tego algorytmu jest znalezienie grup w danych, przy czym liczba grup reprezentowana jest przez zmienną K.

Algorytm działa iteracyjnie, aby przypisać każdy punkt danych do jednej z K grup na podstawie dostarczonych funkcji. Punkty danych są grupowane na podstawie podobieństwa cech.

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

Klastry median K

Jest to inny rodzaj algorytmu grupowania, który oblicza średnią dla każdego klastra w celu określenia jego środka ciężkości.

Grupowanie K-medoidów

Podejście to opiera się na zadanym zestawie elementów, wykorzystując macierz odległości i liczbę klastrów przekazanych przez użytkownika.

Rozważ macierz odległości, jak określono poniżej -

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

Możemy obliczyć grupowanie k-medoidów za pomocą poniższego polecenia -

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

Rozważmy przykład.

Funkcja kcluster przyjmuje macierz danych jako dane wejściowe, a nie instancje Seq. Musisz przekonwertować swoje sekwencje na macierz i dostarczyć to do funkcji kcluster.

Jednym ze sposobów konwersji danych do macierzy zawierającej tylko elementy numeryczne jest użycie rozszerzenia numpy.fromstringfunkcjonować. Zasadniczo tłumaczy każdą literę w sekwencji na jej odpowiednik w ASCII.

Tworzy to dwuwymiarową tablicę zakodowanych sekwencji, które funkcja kcluster rozpoznała i wykorzystuje do grupowania sekwencji.

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

Mapy samoorganizujące się

To podejście jest rodzajem sztucznej sieci neuronowej. Został opracowany przez Kohonena i często nazywany jest mapą Kohonena. Organizuje elementy w klastry w oparciu o topologię prostokątną.

Utwórzmy prosty klaster, używając tej samej odległości tablicy, jak pokazano poniżej -

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

Tutaj, clusterid to tablica z dwiema kolumnami, w której liczba wierszy jest równa liczbie elementów, które zostały zgrupowane, a data jest tablicą zawierającą wymiary wierszy lub kolumn.

Analiza głównych składowych

Analiza głównych komponentów jest przydatna do wizualizacji danych wielowymiarowych. Jest to metoda wykorzystująca proste operacje na macierzach z algebry liniowej i statystyki w celu obliczenia rzutu oryginalnych danych na tę samą liczbę lub mniej wymiarów.

Principal Component Analysis zwraca kolumnę krotki, współrzędne, składniki i wartości własne. Przyjrzyjmy się podstawom tej koncepcji.

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

Zastosujmy te same prostokątne dane macierzy do modułu Bio.Cluster, jak zdefiniowano poniżej -

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