Python层次聚类画出树状图
2024.02.17 11:34浏览量:6简介:在Python中,我们使用Scikit-learn库的AgglomerativeClustering和dendrogram模块,可以实现层次聚类并绘制树状图。以下是一个简单的例子:
千帆应用开发平台“智能体Pro”全新上线 限时免费体验
面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用
首先,我们需要安装必要的库。如果你还没有安装,可以使用pip来安装:
pip install numpy matplotlib scikit-learn pandas
然后,我们可以使用以下代码进行层次聚类并绘制树状图:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
from sklearn.preprocessing import scale
from scipy.spatial.distance import pdist, squareform
# 生成样本数据
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4, random_state=0)
X = scale(X)
# 计算距离矩阵
D = squareform(pdist(X, 'euclidean'))
Z = AgglomerativeClustering(n_clusters=3, distance=D, affinity='precomputed').fit(D)
# 绘制树状图
fig = plt.figure(figsize=(10, 7))
_ = plt.title('Hierarchical Clustering Dendrogram')
dendrogram = ax.dendrogram(Z.children_, orientation='top', distance_sort='descending')
plt.show()
在这个例子中,我们首先生成了一些样本数据,然后计算了这些数据之间的欧几里得距离。接着,我们使用AgglomerativeClustering类进行层次聚类,并使用dendrogram函数绘制了树状图。在树状图中,每个节点表示一个数据点,如果两个数据点被聚类到一起,那么这两个节点就会合并成一个新的节点。树状图的顶部表示所有的数据点都聚类在一起,底部表示每个数据点都是一个独立的聚类。
注意,层次聚类的时间复杂度较高,因此对于大数据集可能不太适用。此外,选择合适的距离度量和聚类数也是层次聚类中的一个重要问题。

发表评论
登录后可评论,请前往 登录 或 注册