使用Python进行层次聚类

使用 scipy.cluster.hierarchy.linkage进行层次聚类

from scipy.cluster.hierarchy import dendrogram, linkage,fcluster
from matplotlib import pyplot as plt
X = [[i] for i in [0.5, 1.5, 4.5]]
# X = [[1,2],[3,2],[4,4],[1,2],[1,3]]
Z = linkage(X, method= 'single')
dn = dendrogram(Z, labels = ['first', 'second', 'third'])
plt.show()
print(Z)

进行层次聚类的数据样本有n个,那么linkage返回的矩阵的shape为(n-1, 4)

这个linkage矩阵的行表示每次合并的两个簇,每行的四列分别表示:前两列表示这次合并中所用到的两个簇的标号,第三列表示这两个簇之间的距离,第四列表示这两个簇合并后所包含的样本的个数。

使用sklearn.cluster.AgglomerativeClustering进行层次聚类

from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram
import matplotlib.pyplot as plt
import numpy as np

X = [[i] for i in [0.5, 1.5, 4.5]]
ac = AgglomerativeClustering()
ac.fit(X)
print(ac.children_)

children_属性的shape为(n_samples-1, 2),等价于linkage矩阵的前两列。

推荐用第一种方法进行层次聚类以及可视化。

原文地址:https://www.cnblogs.com/ZeroTensor/p/11096904.html