當前位置:
首頁 >
PPI数据集分析
發(fā)布時間:2023/12/8
28
豆豆
從今天開始正式進入針對藥物發(fā)現(xiàn)的相關數據集的介紹與應用。文章中所有的代碼都是依托PYG來實現(xiàn)的。
PPI數據集下載地址:https://data.dgl.ai/dataset/ppi.zip
1. 數據集介紹
蛋白質 - 蛋白質相互作用網絡,包含位置基因集,基序基因集和免疫特征作為特征(共50個)和基因本體集作為標簽(共121個)。
| 20 | ~2,245 | ~61,318 | 50 | 121 |
2. 視圖化PPI
2.1 networkx
from torch_geometric.datasets import PPI from torch_geometric.utils import to_networkx import matplotlib.pyplot as plt import networkx as nx# 加載數據集 dataset = PPI(root='E:/data/ppi')# 若是先前已經存在數據集,那么就把對應的數據集的文件放在以raw命名的文件夾中即可#先取PPI中的第一個圖來進行可視化 g = dataset[0] g = to_networkx(g) nx.draw(g,with_labels=g.nodes) plt.show()2.2 t-SNE
t-SNE是一種集降維與可視化于一體的技術,它是基于SNE可視化的改進,解決了SNE在可視化后樣本分布擁擠、邊界不明顯的特點,是目前最好的降維可視化手段。
關于t-SNE的歷史和原理詳見 從SNE到t-SNE再到LargeVis (bindog.github.io)
2.2.1 參數
| n_components | 嵌入空間的維度 |
| perpexity | 混亂度,表示t-SNE優(yōu)化過程中考慮鄰近點的多少,默認為30,建議取值在5到50之間 |
| early_exaggeration | 表示嵌入空間簇間距的大小,默認為12,該值越大,可視化后的簇間距越大 |
| learning_rate | 學習率,表示梯度下降的快慢,默認為200,建議取值在10到1000之間 |
| n_iter | 迭代次數,默認為1000,自定義設置時應保證大于250 |
| min_grad_norm | 如果梯度小于該值,則停止優(yōu)化。默認為1e-7 |
| metric | 表示向量間距離度量的方式,默認是歐氏距離。如果是precomputed,則輸入X是計算好的距離矩陣。也可以是自定義的距離度量函數。 |
| init | 初始化,默認為random。取值為random為隨機初始化,取值為pca為利用PCA進行初始化(常用),取值為numpy數組時必須shape=(n_samples, n_components) |
| verbose | 是否打印優(yōu)化信息,取值0或1,默認為0=>不打印信息。打印的信息為:近鄰點數量、耗時、σσσ、KL散度、誤差等 |
| random_state | 隨機數種子,整數或RandomState對象 |
| method | 兩種優(yōu)化方法:barnets_hut和exact。第一種耗時O(NlogN)O(NlogN)O(NlogN),第二種耗時O(N2)O(N^2)O(N2)但是誤差小,同時第二種方法不能用于百萬級樣本 |
| angle | 當method=barnets_hut時,該參數有用,用于均衡效率與誤差,默認值為0.5,該值越大,效率越高&誤差越大,否則反之。當該值在0.2-0.8之間時,無變化。 |
返回對象的屬性表:
| embedding_ | 嵌入后的向量 |
| kl_divergence_ | KL散度 |
| n_iter_ | 迭代的輪數 |
2.2.2 轉換后維度
tsne = manifold.TSNE(n_components=3,init='pca',random_state=2022) x_tsne = tsne.fit_transform(labels.x) print(f'原始的數據嵌入維度{labels.x[-1]}\n轉換后維度嵌入{x_tsne[-1]}') tsne = manifold.TSNE(n_components=2,init='pca',random_state=2022) x_tsne = tsne.fit_transform(labels.x) # print(f'原始的數據嵌入維度{labels.x[-1]}\n轉換后維度嵌入{x_tsne[-1]}') fig = plt.figure(figsize=(8, 8)) plt.scatter(x_tsne[:, 0], x_tsne[:, 1],c=label_onehot1, cmap=plt.cm.Spectral)plt.show()附則
由于PPI的標簽信息是一個121位的二進制編碼,這里所以就無法使用,下面是我將這個1767X121編碼轉化為1767X1的過程
重點感謝我的同學:萬亮和鈺杰。
因為他們的出謀劃策,我才能順利的完成這一小節(jié)的工作。
labels = labels.y.numpy() np.savetxt('E:\data\ppi/label_onehot.csv',labels,fmt='%d') label_onehot = np.loadtxt('E:\data\ppi/label_onehot.csv',dtype='int') dic1={} v=[] # 建立一個可以將標簽中相同節(jié)點的值放在一起的字典 for i in range(len(label_onehot)):for j in range(len(label_onehot)):if all(label_onehot[i]==label_onehot[j]):v.append(j)else:continuedic1[i]=vv= []# 去出字典中的重復項 dicv =[i for i in range(1767)]for i in dicv:for j in dicv:if i != j and all(label_onehot[i] == label_onehot[j]):dic1.pop(j)dicv.remove(j)# #找到值大于1的鍵 pa = [] for i in dicv:if len(dic1[i]) >1:pa.append(i)# 對照字典里面的值對標簽進行修改 dicp = [i for i in range(1767)] labelp =pd.read_csv('E:\data\ppi/label_onehot1.csv') labelp['index']=dicpfor p in pa:labelp['index'].replace(dic1[p],p,inplace=True)labelp.to_csv('E:\data\ppi/label_onehot2.csv') label_onehot1 = np.loadtxt('E:\data\ppi/label_onehot3.csv',dtype=int)總結
- 上一篇: 手机PPI计算公式
- 下一篇: 不同BMP位图与调色板分析