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