日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

PPI数据集分析

發(fā)布時間:2023/12/8 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PPI数据集分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

從今天開始正式進入針對藥物發(fā)現(xiàn)的相關數據集的介紹與應用。文章中所有的代碼都是依托PYG來實現(xiàn)的。

PPI數據集下載地址:https://data.dgl.ai/dataset/ppi.zip

1. 數據集介紹

蛋白質 - 蛋白質相互作用網絡,包含位置基因集,基序基因集和免疫特征作為特征(共50個)和基因本體集作為標簽(共121個)。

graphsnodesedgesfeaturestasks
20~2,245~61,31850121
# 加載數據集 dataset = PPI(root='E:/data/ppi')# 若是先前已經存在數據集,那么就把對應的數據集的文件放在以raw命名的文件夾中即可print(f'數據集包含圖的數量是:{len(dataset)}') print(f'一共有{dataset.num_classes}類') print(f'節(jié)點的特征{dataset.num_node_features}') print(f'邊的特征{dataset.num_edge_features}') print(f'取出第一個圖的參數{dataset[0]}') print(f'取出特征{dataset[0].x}') print(f'取出邊{dataset[0].edge_index}') print(f'取出標簽{dataset[0].y}')

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 參數

parameters描述
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之間時,無變化。

返回對象的屬性表:

Atrtributes描述
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数据集分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。