在线播放免费人成视频在线观看,男人和女人做爽爽免费视频,亚洲国产日韩欧美综合A,亚洲色av性色在线观无码

生信分析_層次聚類

基本使用+主成分分析繪圖觀察結(jié)果+數(shù)據(jù)可視化

讀取數(shù)據(jù)后,我們就可以進(jìn)行層次聚類圖的繪制了,首先進(jìn)入scipy參考文檔頁面,然后找到聚類包Clustering package (scipy.cluster)->層次聚類scipy.cluster.hierarchy,在當(dāng)前頁面下,就可以看到所有層次聚類相關(guān)的函數(shù)了,我們找到可以畫圖的函數(shù)dendrogram,進(jìn)入該函數(shù)的文檔頁面,發(fā)現(xiàn)該函數(shù)需要傳入的第一個參數(shù)是linkage矩陣,這個矩陣需要函數(shù)linkage,進(jìn)入該函數(shù)的文檔頁面我們看到linkage的說明文檔上面的函數(shù)scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean', optimal_ordering=False),傳入第一個參數(shù)是需要進(jìn)行層次聚類的數(shù)據(jù),這里即可用使用開始讀取的數(shù)據(jù)變量df,第二個參數(shù)代表層次聚類選用的方法

import pandas as pd
import seaborn as sns #用于話熱圖的工具包
from scipy.cluster import hierarchy #用于進(jìn)行層次聚類,話層次聚類圖的工具包
from scipy import cluster
import matplotlib.pyplot as plt
from sklearn import decomposition as skldec #用于主成分分析降維的包

df = pd.read_excel("test.xlsx",index_col=0)

#開始畫層次聚類樹狀圖
Z = hierarchy.linkage(df, method ='ward',metric='euclidean')
hierarchy.dendrogram(Z,labels = df.index)

第三個參數(shù)代表距離計算的方法,即上面方法中的dist()函數(shù)具體的計算方式,具體方式可以見這個頁面。
然后這里我隨便選擇兩個,然后將返回的結(jié)果Z傳入dendrogram函數(shù),

關(guān)鍵是這個函數(shù)可以自己定義距離。這就為我們進(jìn)行層次聚類提供了很好的一個接口,因為在特定任務(wù)下,scipy函數(shù)里面給出的距離不一定能夠滿足我們自己的實(shí)際需求。為了能夠自定義距離度量,我進(jìn)行了一些測試,最后得出自定義距離度量函數(shù)需要注意以下幾個方面:

函數(shù)傳入兩個參數(shù):比如,自定義函數(shù)為:def selfDisFuc(a,b):
傳入?yún)?shù)類型是<class 'numpy.ndarray'>
傳入?yún)?shù)的維度必須一樣
返回值必須是一個代表距離的數(shù)
我這處理自定義函數(shù)時,因為處理的數(shù)據(jù)維度不一樣,最后只好找到最大維度的數(shù)據(jù),然后將不一樣的所有
數(shù)據(jù)后面補(bǔ)上-1(我的數(shù)據(jù)中不會出現(xiàn)的一個數(shù)),然后再處理。
安照上面的三個規(guī)則,就能寫出自己需要的距離衡量函數(shù)了。

 

#在某個高度進(jìn)行剪切
label = cluster.hierarchy.cut_tree(Z,height=0.8)
label = label.reshape(label.size,)

#根據(jù)兩個最大的主成分進(jìn)行繪圖
pca = skldec.PCA(n_components = 0.95) #選擇方差95%的占比
pca.fit(df) #主成分析時每一行是一個輸入數(shù)據(jù)
result = pca.transform(df) #計算結(jié)果
plt.figure() #新建一張圖進(jìn)行繪制
plt.scatter(result[:, 0], result[:, 1], c=label, edgecolor='k') #繪制兩個主成分組成坐標(biāo)的散點(diǎn)圖
for i in range(result[:,0].size):
plt.text(result[i,0],result[i,1],df.index[i]) #在每個點(diǎn)邊上繪制數(shù)據(jù)名稱
x_label = 'PC1(%s%%)' % round((pca.explained_variance_ratio_[0]*100.0),2) #x軸標(biāo)簽字符串
y_label = 'PC1(%s%%)' % round((pca.explained_variance_ratio_[1]*100.0),2) #y軸標(biāo)簽字符串
plt.xlabel(x_label) #繪制x軸標(biāo)簽
plt.ylabel(y_label) #繪制y軸標(biāo)簽

#層次聚類的熱圖和聚類圖
sns.clustermap(df,method ='ward',metric='euclidean')

plt.show()

 

評價方法
關(guān)于層次聚類的評價問題。在官方文檔中有一個API用來根據(jù)計算層次聚類根據(jù)結(jié)果計算其對應(yīng)的共表性相關(guān)系數(shù)(Cophenetic Correlation Coefficient)。共表相關(guān)系數(shù)越大,表明效果越好。

下面是計算共表相關(guān)系數(shù)的API

Y = scipy.spatial.distance.pdist((X,'cityblock'); #計算距離列表
Z = hierarchy.linkage(Y,'average'); #進(jìn)行層次聚類
cluster.hierarchy.cophenet(Z,Y) #計算共表相關(guān)系數(shù)

參考:https://people.revoledu.com/kardi/tutorial/Clustering/Cophenetic.htm

 

溫馨提示:當(dāng)你和其他人給原創(chuàng)帖子點(diǎn)贊時,作者會得到報酬,如果你喜歡閱讀這里的內(nèi)容,請立即創(chuàng)建你的聚生物賬戶,并開始為你的知識換取價值。

發(fā)表評論