Visualisasikan Ruang Gabungan dengan Pengurangan Dimensi Sidik Jari

2019 10 年 月 日 26

Visualisasikan ruang majemuk (ruang kimia) berdasarkan struktur kimianya menggunakan kumpulan data majemuk yang tersedia secara gratis dan tersedia untuk umum.

motif

Visualisasi ruang majemuk adalah
・Apakah ada senyawa istimewa dalam kumpulan data?
・Apa jenis senyawa yang terkandung dalam jumlah berapa?
membantu dalam memahami Saat membangun model prediktif untuk QSAR atau pembelajaran mesin, Anda juga dapat menentukan secara kasar apakah ada ekstrapolasi dalam data Anda.

cara

Perhitungan sidik jari

Hasilkan sidik jari untuk setiap senyawa dan kurangi dimensinya sehingga dapat diplot pada bidang. Menurut prinsip sifat mirip Johnson dan Maggiora, ``senyawa serupa memiliki sifat serupa,'' senyawa dengan struktur dan sifat serupa harus didistribusikan berdekatan satu sama lain pada bidang.

Untuk sidik jari yang digunakan untuk visualisasi, coba sidik jari Morgan dan sidik jari RDkit.

Referensi: sidik jari tersedia di RDkit

Teknik reduksi dimensi

Untuk pengurangan dimensi, kami akan menggunakan analisis komponen utama (PCA) dan UMAP. PCA adalah yang paling umum digunakan tetapi mungkin tidak cocok untuk data 0-1 seperti sidik jari karena dikompresi ke ruang dimensi yang lebih rendah berdasarkan linearitas data.
Di sisi lain, UMAP adalah salah satu metode reduksi dimensi dengan mempertimbangkan komponen nonlinier.Ini dapat digunakan untuk kumpulan data besar karena dapat menyelesaikan pengurangan dimensi seperti t-SNE standar dari metode yang sama beberapa kali lebih cepat.

Metode kmeans dan SpectralClustering digunakan untuk pengelompokan.
Metode kmeans melakukan pengelompokan dengan mengulangi serangkaian operasi (XNUMX) menempatkan cluster secara acak, (XNUMX) menambahkan titik data terdekat untuk memperbarui posisi pusat gravitasi, dan (XNUMX) menemukan kembali pusat gravitasi menggunakan pembaruan data di dekat pusat gravitasi. Diketahui bahwa data non-linear seperti Moon dan Swiss roll tidak dapat diklasifikasikan dengan baik, namun Spectral Clustering juga dapat menangani data tersebut. Lembar contekan scikit learn juga merupakan opsi ketika metode kmeans tidak berfungsi.

Saya ingin mencoba menggabungkannya dengan "metode PCA × kmeans", yang mengasumsikan distribusi normal dan data linear, dan "UMAP × Spectral Clustering", yang mendukung data nonlinear.

Ngomong-ngomong, ada juga metode pengelompokan senyawa berdasarkan koefisien tanimoto (tingkat kesamaan antara dua senyawa dinyatakan dari 2 hingga 0, dengan 1 struktur yang sama), yang sering digunakan sebagai indeks kesamaan senyawa. Tidak ...

Lihat: Pengurangan Dimensi dan Teknik Pemetaan Dua Dimensi untuk Data Dimensi Tinggi
   SpectralClustering (analisis klaster)

Visualisasikan ruang majemuk

Kami menggunakan Lipophilicity dari Molecule net untuk dataset kami.Sekitar 4200 senyawa disertakan dengan SMILES masing-masing dan logP eksperimental (ukuran hidrofobisitas: koefisien partisi oktanol/air).

Lihat juga:Daftar kumpulan data gabungan

# paket impor panda sebagai pd impor numpy sebagai np dari sklearn.cluster impor KMeans dari sklearn.decomposition impor PCA dari sklearn.cluster impor SpectralClustering impor umap dari rdkit impor Chem dari rdkit.Chem impor AllChem impor matplotlib.pyplot sebagai plt %matplotlib inline # baca dataset df = pd.read_csv('Lipophilicity.csv') print(df.info()) df.head(5)


RangeIndex: 4200 entri, 0 hingga 4199
Kolom data (total 3 kolom):
CMPD_CHEMBLID 4200 objek bukan nol
exp 4200 non-null float64
tersenyum 4200 objek non-null
dtypes: float64(1), objek(2) penggunaan memori: 98.5+ KB Tidak ada

kumpulan data logP

 

# Dapatkan Sidik Jari Morgan dan RDkit Fingerprint mols = [Chem.MolFromSmiles(x) untuk x dalam df.smiles] morgan_fps = [AllChem.GetMorganFingerprintAsBitVect(x, 2, 1024) untuk x dalam mol] rdkit_fps = [Chem.RDKFingerprint (x, fpSize=1024) untuk x dalam mol] # Menyimpan sidik jari dalam DF df_morgan_fps = pd.DataFrame(np.array(morgan_fps)) df_rdkit_fps = pd.DataFrame(np.array(rdkit_fps))

Sidik jari Morgan menghitung substruktur dalam radius tertentu dari atom tertentu. Algoritma yang mirip dengan sidik jari ECFP (Extended Connectivity Fingerprint), di mana radius 2 Morgan setara dengan ECFP4.Di sini kita menghitung sidik jari dengan radius = 2, 1024 bit.
Sidik jari RDkit menghitung substruktur berdasarkan panjang ikatan daripada jari-jari atom.Ini mirip dengan sidik jari Daylight.Secara default, panjang jalur minimum: 1 ikatan – panjang jalur maksimum: 7 ikatan dipertimbangkan.

Sidik jari yang dihasilkan adalahIni adalah objek seperti , dan tidak dapat diproses sebagaimana adanya, sehingga diubah menjadi bingkai data.
 

# kmeans clustering kmeans = KMeans(n_clusters=8, n_jobs=-1) kmeans.fit(df_morgan_fps) # pengurangan dimensi dengan PCA pca = PCA(n_components = 2) dekomp = pca.fit_transform(df_morgan_fps) x = dekomp[:,0 ] y = dekompilasi[:,1] # visualisasi plt.figure(figsize=(15,5)) # warna dengan cluster diperoleh dengan metode kmeans plt.subplot(1,2,1) plt.scatter(x, y , c = kmeans.labels_, alpha=0.7) plt.title("PCA: morgan_fps, cluster") plt.colorbar() # warna oleh logP plt.subplot(1,2,2) plt.scatter(x, y, c= df.exp, alpha=0.7, cmap='spring') plt.title("PCA: morgan_fps, logP") plt.colorbar()

Hasil visualisasi ruang majemuk dengan sidik jari RDkit.

Demikian pula, ubah bagian df_morgan_fps menjadi df_rdkit_fps dan visualisasikan dengan sidik jari RDkit.Kesan bahwa entah bagaimana sidik jari RDkit diproyeksikan dengan indah ↓

# Visualisasikan sidik jari RDkit dengan 'UMAP × Spectral Clustering' sc = SpectralClustering(n_clusters=50, affinity= 'nearest_neighbors', n_jobs =-1) sc.fit(df_rdkit_fps) embedding = umap.UMAP(n_neighbors = 50, n_components = 2, min_dist=0.5).fit_transform(df_rdkit_fps) x = embedding[:,0] y = embedding[:,1] fig = plt.figure(figsize=(15,5)) plt.subplot(1,2,1 ) plt .scatter(x, y, c= sc.labels_, alpha=0.7) plt.title("rdkit_fps, SpectralCluster") plt.colorbar() plt.subplot(1,2,2) plt.scatter(x, y, c= df.exp, alpha=0.7, cmap='spring') plt.title("rdkit_fps, logP") plt.colorbar()

Saya merasa "UMAP x Spectral Clustering" lebih padat dengan senyawa serupa daripada "PCA x kmeans", tapi saya tidak peduli.

Mengenai logP, hubungan antara posisi di bidang dan nilai properti fisik tidak kentara.Autoencoder atau pembelajaran yang diawasi tampaknya lebih baik untuk memplot dalam ruang dua dimensi dalam korelasi dengan sifat fisik dan nilai aktivitas senyawa, jadi saya ingin segera mencobanya.