Python层次聚类画出树状图

作者:问题终结者2024.02.17 11:34浏览量:6

简介:在Python中,我们使用Scikit-learn库的AgglomerativeClustering和dendrogram模块,可以实现层次聚类并绘制树状图。以下是一个简单的例子:

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

首先,我们需要安装必要的库。如果你还没有安装,可以使用pip来安装:

  1. pip install numpy matplotlib scikit-learn pandas

然后,我们可以使用以下代码进行层次聚类并绘制树状图:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn.cluster import AgglomerativeClustering
  4. from sklearn.datasets import make_blobs
  5. from sklearn.preprocessing import scale
  6. from scipy.spatial.distance import pdist, squareform
  7. # 生成样本数据
  8. centers = [[1, 1], [-1, -1], [1, -1]]
  9. X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4, random_state=0)
  10. X = scale(X)
  11. # 计算距离矩阵
  12. D = squareform(pdist(X, 'euclidean'))
  13. Z = AgglomerativeClustering(n_clusters=3, distance=D, affinity='precomputed').fit(D)
  14. # 绘制树状图
  15. fig = plt.figure(figsize=(10, 7))
  16. _ = plt.title('Hierarchical Clustering Dendrogram')
  17. dendrogram = ax.dendrogram(Z.children_, orientation='top', distance_sort='descending')
  18. plt.show()

在这个例子中,我们首先生成了一些样本数据,然后计算了这些数据之间的欧几里得距离。接着,我们使用AgglomerativeClustering类进行层次聚类,并使用dendrogram函数绘制了树状图。在树状图中,每个节点表示一个数据点,如果两个数据点被聚类到一起,那么这两个节点就会合并成一个新的节点。树状图的顶部表示所有的数据点都聚类在一起,底部表示每个数据点都是一个独立的聚类。

注意,层次聚类的时间复杂度较高,因此对于大数据集可能不太适用。此外,选择合适的距离度量和聚类数也是层次聚类中的一个重要问题。

article bottom image

相关文章推荐

发表评论