python的scipy層次聚類參數詳解

詳解python中層次聚類的fcluster函數

調用實例:

import scipy
import scipy.cluster.hierarchy as sch
from scipy.cluster.vq import vq,kmeans,whiten
import numpy as np
import matplotlib.pylab as plt

points=scipy.randn(20,4)  

#1. 層次聚類
#生成點與點之間的距離矩陣,這裏用的歐氏距離:
disMat = sch.distance.pdist(points,'euclidean') 
#進行層次聚類:
Z=sch.linkage(disMat,method='average') 
#將層級聚類結果以樹狀圖表示出來並保存爲plot_dendrogram.png
P=sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
#根據linkage matrix Z得到聚類結果:
cluster= sch.fcluster(Z, t=1, 'inconsistent') 

print "Original cluster by hierarchy clustering:\n",cluster

參數列表如下:

def fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None):

Z代表了利用“關聯函數”關聯好的數據。
比如上面的調用實例就是使用歐式距離來生成距離矩陣,並對矩陣的距離取平均
這裏可以使用不同的距離公式

t這個參數是用來區分不同聚類的閾值,在不同的criterion條件下所設置的參數是不同的。
比如當criterion爲’inconsistent’時,t值應該在0-1之間波動,t越接近1代表兩個數據之間的相關性越大,t越趨於0表明兩個數據的相關性越小。這種相關性可以用來比較兩個向量之間的相關性,可用於高維空間的聚類

depth 代表了進行不一致性(‘inconsistent’)計算的時候的最大深度,對於其他的參數是沒有意義的,默認爲2

criterion這個參數代表了判定條件,這裏詳細解釋下各個參數的含義:
1. 當criterion爲’inconsistent’時,t值應該在0-1之間波動,t越接近1代表兩個數據之間的相關性越大,t越趨於0表明兩個數據的相關性越小。這種相關性可以用來比較兩個向量之間的相關性,可用於高維空間的聚類
2. 當criterion爲’distance’時,t值代表了絕對的差值,如果小於這個差值,兩個數據將會被合併,當大於這個差值,兩個數據將會被分開。
3. 當criterion爲’maxclust’時,t代表了最大的聚類的個數,設置4則最大聚類數量爲4類,當聚類滿足4類的時候,迭代停止
4. 當criterion爲’monocrit’時,t的選擇不是固定的,而是根據一個函數monocrit[j]來確定。例如例如,對最大平均距離的閾值在不一致矩陣r中計算閾值0.8,可以這樣寫,

MR = maxRstat(Z, R, 3)
cluster(Z, t=0.8, criterion='monocrit', monocrit=MR)
  1. 當criterion爲’maxclust_monocrit’時,函數會在最大聚類數量爲t的同時,將閾值t減小到最小的不一致性。
    調用實例如下:
MI = maxinconsts(Z, R)
cluster(Z, t=3, criterion='maxclust_monocrit', monocrit=MI)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章