使用fcluster()函数进行层次聚类分析
发布时间:2024-01-14 20:37:19
fcluster()函数是SciPy库中的一个函数,用于进行层次聚类分析。层次聚类是一种无监督学习算法,它将数据集中的样本逐步聚集在一起,形成多个层次的聚类结构。fcluster()函数可以根据聚类的结果为每个样本分配一个聚类标签。
下面是一个使用fcluster()函数进行层次聚类分析的例子:
from scipy.cluster.hierarchy import dendrogram, linkage, fcluster import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X = np.random.randn(50, 2) # 计算距离矩阵 Z = linkage(X, method='ward') # 绘制树状图 dendrogram(Z) # 设置阈值,将数据分为三类 threshold = 1.5 clusters = fcluster(Z, threshold, criterion='distance') # 绘制聚类结果 plt.scatter(X[:, 0], X[:, 1], c=clusters) plt.show()
在上面的例子中,首先使用np.random.randn()函数生成了一个50x2的随机数据集X。然后使用linkage()函数计算X中样本之间的距离矩阵Z,method='ward'表示使用Ward方差最小化算法进行层次聚类。
接下来,使用dendrogram()函数绘制聚类结果的树状图。树状图可以帮助我们选择合适的阈值来划分聚类。
然后,使用fcluster()函数将数据集X划分为三类。threshold参数指定了聚类的阈值,criterion='distance'表示使用距离作为判定标准。
最后,使用plt.scatter()函数绘制聚类结果,每个类别用不同的颜色表示。
通过运行上面的代码,我们可以得到以下图示结果:

从图中可以看出,数据集被分为了三个类别,分别用不同的颜色表示。
