Учебники

Биопайтон — кластерный анализ

Как правило, кластерный анализ группирует набор объектов в одну группу. Эта концепция в основном используется в интеллектуальном анализе данных, статистическом анализе данных, машинном обучении, распознавании образов, анализе изображений, биоинформатике и т. Д. С помощью различных алгоритмов можно понять, как кластер широко используется в различных анализах.

Согласно Биоинформатике, кластерный анализ в основном используется при анализе данных экспрессии генов, чтобы найти группы генов с одинаковой экспрессией генов.

В этой главе мы рассмотрим важные алгоритмы в 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. Этот объект содержит узлы, в которых количество элементов сгруппировано в виде строк или столбцов.

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

Этот подход основан на заданном наборе элементов с использованием матрицы расстояний и количества кластеров, переданных пользователем.

Рассмотрим матрицу расстояний, как определено ниже —

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

Самоорганизующиеся карты

Этот подход представляет собой тип искусственной нейронной сети. Он разработан Кохоненом и часто называется картой Кохонена. Он организует элементы в кластеры на основе прямоугольной топологии.

Давайте создадим простой кластер, используя то же расстояние массива, как показано ниже —

>>> 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 — это массив с измерениями, как строками, так и столбцами.

Анализ главных компонентов

Анализ основных компонентов полезен для визуализации многомерных данных. Это метод, который использует простые матричные операции из линейной алгебры и статистики для вычисления проекции исходных данных в то же число или меньшее число измерений.

Анализ главных компонентов возвращает значение столбца кортежа, координаты, компоненты и собственные значения. Давайте посмотрим на основы этой концепции.

>>> 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, как определено ниже: