Biopython - Analisis Cluster
Secara umum, Cluster analysis mengelompokkan sekumpulan objek dalam satu kelompok. Konsep ini terutama digunakan dalam penambangan data, analisis data statistik, pembelajaran mesin, pengenalan pola, analisis gambar, bioinformatika, dll. Ini dapat dicapai dengan berbagai algoritme untuk memahami bagaimana cluster digunakan secara luas dalam analisis yang berbeda.
Menurut Bioinformatika, analisis cluster terutama digunakan dalam analisis data ekspresi gen untuk menemukan kelompok gen dengan ekspresi gen yang serupa.
Dalam bab ini, kita akan memeriksa algoritma penting di Biopython untuk memahami dasar-dasar pengelompokan pada dataset nyata.
Biopython menggunakan modul Bio.Cluster untuk mengimplementasikan semua algoritma. Ini mendukung algoritma berikut -
- Pengelompokan Hierarki
- K - Pengelompokan
- Peta Pengorganisasian Sendiri
- Analisis Komponen Utama
Mari kita memiliki pengantar singkat tentang algoritma di atas.
Pengelompokan Hierarki
Pengelompokan hierarki digunakan untuk menghubungkan setiap node dengan ukuran jarak ke tetangga terdekatnya dan membuat cluster. Node Bio.Cluster memiliki tiga atribut: kiri, kanan dan jarak. Mari kita buat cluster sederhana seperti yang ditunjukkan di bawah ini -
>>> from Bio.Cluster import Node
>>> n = Node(1,10)
>>> n.left = 11
>>> n.right = 0
>>> n.distance = 1
>>> print(n)
(11, 0): 1
Jika Anda ingin membangun pengelompokan berbasis pohon, gunakan perintah di bawah ini -
>>> 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
Mari kita lakukan pengelompokan hierarki menggunakan modul Bio.Cluster.
Pertimbangkan jarak yang didefinisikan dalam sebuah array.
>>> import numpy as np
>>> distance = array([[1,2,3],[4,5,6],[3,5,7]])
Sekarang tambahkan array jarak di cluster pohon.
>>> from Bio.Cluster import treecluster
>>> cluster = treecluster(distance)
>>> print(cluster)
(2, 1): 0.666667
(-1, 0): 9.66667
Fungsi di atas mengembalikan objek cluster Pohon. Objek ini berisi node di mana jumlah item dikelompokkan sebagai baris atau kolom.
K - Pengelompokan
Ini adalah jenis algoritma partisi dan diklasifikasikan menjadi k - means, median dan pengelompokan medoid. Mari kita pahami masing-masing clustering secara singkat.
Pengelompokan K-means
Pendekatan ini populer di data mining. Tujuan dari algoritma ini adalah untuk menemukan kelompok dalam data, dengan jumlah kelompok yang diwakili oleh variabel K.
Algoritme bekerja secara iteratif untuk menetapkan setiap titik data ke salah satu grup K berdasarkan fitur yang disediakan. Titik data dikelompokkan berdasarkan kesamaan fitur.
>>> 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
Pengelompokan K-median
Ini adalah jenis algoritma pengelompokan lain yang menghitung rata-rata setiap cluster untuk menentukan pusatnya.
Pengelompokan K-medoids
Pendekatan ini didasarkan pada kumpulan item tertentu, menggunakan matriks jarak dan jumlah cluster yang dilewati oleh pengguna.
Pertimbangkan matriks jarak seperti yang ditentukan di bawah ini -
>>> distance = array([[1,2,3],[4,5,6],[3,5,7]])
Kita dapat menghitung pengelompokan k-medoids menggunakan perintah di bawah ini -
>>> from Bio.Cluster import kmedoids
>>> clusterid, error, found = kmedoids(distance)
Mari kita perhatikan sebuah contoh.
Fungsi kcluster mengambil matriks data sebagai input dan bukan instance Seq. Anda perlu mengubah urutan Anda menjadi matriks dan menyediakannya ke fungsi kcluster.
Salah satu cara untuk mengubah data menjadi matriks yang hanya berisi elemen numerik adalah dengan menggunakan numpy.fromstringfungsi. Ini pada dasarnya menerjemahkan setiap huruf secara berurutan ke mitra ASCII-nya.
Ini membuat array 2D dari urutan yang dikodekan yang dikenali oleh fungsi kcluster dan digunakan untuk mengelompokkan urutan Anda.
>>> 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]
Peta Pengorganisasian Sendiri
Pendekatan ini adalah jenis jaringan saraf tiruan. Ini dikembangkan oleh Kohonen dan sering disebut sebagai peta Kohonen. Ini mengatur item ke dalam kelompok berdasarkan topologi persegi panjang.
Mari kita buat cluster sederhana menggunakan jarak array yang sama seperti yang ditunjukkan di bawah ini -
>>> 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]]
Sini, clusterid adalah larik dengan dua kolom, di mana jumlah baris sama dengan jumlah item yang dikelompokkan, dan data adalah larik dengan dimensi baik baris maupun kolom.
Analisis Komponen Utama
Analisis Komponen Utama berguna untuk memvisualisasikan data berdimensi tinggi. Ini adalah metode yang menggunakan operasi matriks sederhana dari aljabar linier dan statistik untuk menghitung proyeksi data asli ke dalam jumlah yang sama atau dimensi yang lebih kecil.
Principal Component Analysis mengembalikan arti kolom tupel, koordinat, komponen, dan nilai eigen. Mari kita lihat dasar-dasar konsep ini.
>>> 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.]
Mari kita terapkan data matriks persegi panjang yang sama ke modul Bio.Cluster seperti yang didefinisikan di bawah ini -
>>> 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.]