Trực quan hóa không gian hỗn hợp bằng cách giảm kích thước vân tay

Ngày 2019 tháng 10 năm 26

Trực quan hóa không gian hợp chất (không gian hóa học) dựa trên cấu trúc hóa học bằng cách sử dụng bộ dữ liệu hợp chất miễn phí và có sẵn công khai.

động lực

Hình dung của không gian hợp chất là
・Có bất kỳ hợp chất mang phong cách riêng nào trong bộ dữ liệu không?
・Loại hợp chất nào được chứa với số lượng bao nhiêu?
giúp hiểu được Khi xây dựng các mô hình dự đoán cho QSAR hoặc máy học, bạn cũng có thể xác định sơ bộ xem có phép ngoại suy trong dữ liệu của mình hay không.

方法

tính vân tay

Tạo một dấu vân tay cho mỗi hợp chất và giảm kích thước để nó có thể được vẽ trên một mặt phẳng. Theo nguyên tắc về tính chất tương tự của Johnson và Maggiora, ''các hợp chất tương tự có tính chất tương tự'', các hợp chất có cấu trúc và tính chất tương tự nên được phân bố gần nhau trên một mặt phẳng.

Đối với dấu vân tay được sử dụng để trực quan hóa, hãy thử dấu vân tay Morgan và dấu vân tay RDkit.

Tham khảo: vân tay có sẵn trong RDkit

Kỹ thuật giảm kích thước

Để giảm kích thước, chúng tôi sẽ sử dụng phân tích thành phần chính (PCA) và UMAP. PCA được sử dụng phổ biến nhất nhưng có thể không phù hợp với dữ liệu 0-1 như dấu vân tay vì nó nén vào không gian có chiều thấp hơn dựa trên tính tuyến tính của dữ liệu.
Mặt khác, UMAP là một trong những phương pháp giảm kích thước khi xem xét các thành phần phi tuyến.Nó có thể được sử dụng cho các tập dữ liệu lớn vì nó có thể hoàn thành việc giảm kích thước như t-SNE tiêu chuẩn của cùng một phương pháp nhanh hơn nhiều lần.

Phương pháp kmeans và SpectralClustering được sử dụng để phân cụm.
Phương pháp kmeans thực hiện phân cụm bằng cách lặp lại một loạt thao tác (XNUMX) đặt ngẫu nhiên các cụm, (XNUMX) thêm các điểm dữ liệu lân cận để cập nhật vị trí của trọng tâm và (XNUMX) tìm lại trọng tâm bằng cách sử dụng công cụ đã cập nhật. dữ liệu gần trọng tâm. Được biết, dữ liệu phi tuyến tính như Mặt trăng và cuộn Thụy Sĩ không thể được phân loại tốt, nhưng Phân cụm quang phổ cũng có thể xử lý những dữ liệu đó. scikit learn cheat sheet cũng là một lựa chọn khi phương pháp kmeans không hoạt động.

Tôi muốn thử kết hợp chúng với "phương pháp PCA × kmeans", giả định dữ liệu tuyến tính và phân phối chuẩn và "Phân cụm quang phổ UMAP ×", hỗ trợ dữ liệu phi tuyến tính.

Nhân tiện, cũng có một phương pháp phân cụm các hợp chất dựa trên hệ số tanimoto (mức độ giống nhau giữa hai hợp chất được biểu thị từ 2 đến 0, với 1 là cùng một cấu trúc), thường được sử dụng làm chỉ số tương tự hợp chất. Không phải ...

Xem: Giảm kích thước và kỹ thuật vẽ đồ thị hai chiều cho dữ liệu nhiều chiều
   SpectralClustering (phân tích cụm)

Trực quan hóa không gian ghép

Chúng tôi sử dụng Lipophilicity từ Molecule net cho tập dữ liệu của mình.Khoảng 4200 hợp chất được bao gồm trong SMILES tương ứng và logP thử nghiệm của chúng (thước đo tính kỵ nước: hệ số phân chia octanol/nước).

Tham khảo:Danh sách tập hợp dữ liệu

# nhập gói nhập gấu trúc dưới dạng pd nhập numpy dưới dạng np từ sklearn.cluster nhập KMeans từ sklearn.decomposition nhập PCA từ sklearn.cluster nhập SpectralClustering nhập umap từ rdkit nhập Chem từ rdkit.Chem nhập AllChem nhập matplotlib.pyplot dưới dạng plt %matplotlib nội tuyến # đọc tập dữ liệu df = pd.read_csv('Lipophilicity.csv') print(df.info()) df.head(5)


RangeIndex: 4200 mục nhập, 0 đến 4199
Các cột dữ liệu (tổng số 3 cột):
Đối tượng không null CMPD_CHEMBLID 4200
exp 4200 không null float64
mỉm cười 4200 đối tượng không null
dtypes: float64(1), đối tượng(2) sử dụng bộ nhớ: 98.5+ KB Không có

bộ dữ liệu logP

 

# Nhận Dấu vân tay Morgan và Dấu vân tay RDkit mols = [Chem.MolFromSmiles(x) for x in df.smiles] morgan_fps = [AllChem.GetMorganFingerprintAsBitVect(x, 2, 1024) for x in mol] rdkit_fps = [Chem.RDKFingerprint (x, fpSize=1024) cho x tính bằng mol] # Lưu trữ vân tay trong DF df_morgan_fps = pd.DataFrame(np.array(morgan_fps)) df_rdkit_fps = pd.DataFrame(np.array(rdkit_fps))

Dấu vân tay của Morgan đếm các cấu trúc con trong bán kính đã đặt từ một nguyên tử nhất định. Một thuật toán tương tự như dấu vân tay ECFP (Extended Connectivity Fingerprint), trong đó bán kính 2 của Morgan tương đương với ECFP4.Ở đây chúng tôi tính toán một dấu vân tay có bán kính = 2, 1024 bit.
Dấu vân tay RDkit liệt kê các cấu trúc con theo độ dài liên kết thay vì bán kính nguyên tử.Điều này tương tự với dấu vân tay Ánh sáng ban ngày.Theo mặc định, độ dài đường dẫn tối thiểu: 1 liên kết – độ dài đường dẫn tối đa: 7 liên kết được xem xét.

Dấu vân tay thu được làNó là một đối tượng như , và nó không thể được xử lý như hiện tại, vì vậy nó được chuyển đổi thành khung dữ liệu.
 

# kmeans phân cụm kmeans = KMeans(n_clusters=8, n_jobs=-1) kmeans.fit(df_morgan_fps) # giảm kích thước bằng PCA pca = PCA(n_components = 2) giải mã = ​​pca.fit_transform(df_morgan_fps) x = giải mã[:,0 ] y = decomp[:,1] # trực quan plt.figure(figsize=(15,5)) # màu theo cụm thu được bằng phương pháp kmeans plt.subplot(1,2,1) plt.scatter(x, y , c = kmeans.labels_, alpha=0.7) plt.title("PCA: morgan_fps, cluster") plt.colorbar() # màu của 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()

Kết quả hiển thị không gian phức hợp với dấu vân tay RDkit.

Tương tự, thay đổi phần df_morgan_fps thành df_rdkit_fps và hiển thị nó bằng dấu vân tay RDkit.Ấn tượng rằng bằng cách nào đó, dấu vân tay RDkit được chiếu rất đẹp ↓

# Trực quan hóa dấu vân tay RDkit với '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()

Tôi cảm thấy như "UMAP x Spectral Clustering" dày đặc hơn với các hợp chất tương tự so với "PCA x kmeans", nhưng tôi cũng không quan tâm.

Về logP, mối quan hệ giữa vị trí trên mặt phẳng và giá trị thuộc tính vật lý là rất tinh tế.Autoencoder hoặc học có giám sát dường như tốt hơn cho việc vẽ đồ thị trong không gian hai chiều tương quan với các tính chất vật lý và giá trị hoạt động của các hợp chất, vì vậy tôi muốn thử nó sớm.