Как правило, кластерный анализ группирует набор объектов в одну группу. Эта концепция в основном используется в интеллектуальном анализе данных, статистическом анализе данных, машинном обучении, распознавании образов, анализе изображений, биоинформатике и т. Д. С помощью различных алгоритмов можно понять, как кластер широко используется в различных анализах.
Согласно Биоинформатике, кластерный анализ в основном используется при анализе данных экспрессии генов, чтобы найти группы генов с одинаковой экспрессией генов.
В этой главе мы рассмотрим важные алгоритмы в 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, как определено ниже: