使用scipy实现层次聚类,显示树状图与所属类别

it2022-05-05  145

1)数据标准化

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这个参数代表了判定条件,这里详细解释下各个参数的含义:

当criterion为’inconsistent’时,t值应该在0-1之间波动,t越接近1代表两个数据之间的相关性越大,t越趋于0表明两个数据的相关性越小。这种相关性可以用来比较两个向量之间的相关性,可用于高维空间的聚类当criterion为’distance’时,t值代表了绝对的差值,如果小于这个差值,两个数据将会被合并,当大于这个差值,两个数据将会被分开。当criterion为’maxclust’时,t代表了最大的聚类的个数,设置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)

当criterion为’maxclust_monocrit’时,函数会在最大聚类数量为t的同时,将阈值t减小到最小的不一致性。 调用实例如下:

MI = maxinconsts(Z, R) cluster(Z, t=3, criterion='maxclust_monocrit', monocrit=MI)

参考

作者:gakki_Yuibo 来源: 原文:https://blog.csdn.net/Enigma_tong/article/details/79081449


最新回复(0)