层次聚类树状图绘制示例

层次聚类是一种常用的聚类方法,它可以生成一个树状图(dendrogram),直观地展示数据点之间的相似度。在本示例中,将使用AgglomerativeClustering算法和scipy库中的dendrogram函数来绘制树状图。还将使用matplotlib库来展示最终的图形。

首先,需要导入必要的库。numpy库用于数值计算,matplotlib库用于绘图,scipy库中的hierarchy模块提供了绘制树状图的功能,而sklearn库中的datasets模块提供了iris数据集,将使用这个数据集来进行聚类分析。

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

接下来,定义一个函数plot_dendrogram,它接受一个模型作为参数,并绘制对应的树状图。在绘制树状图之前,需要创建一个链接矩阵,它包含了每个节点的子节点、距离和样本数量。然后,使用dendrogram函数来绘制树状图。

def plot_dendrogram(model, **kwargs): # 创建链接矩阵并绘制树状图 # 创建每个节点下的样本数量 counts = np.zeros(model.children_.shape[0]) n_samples = len(model.labels_) for i, merge in enumerate(model.children_): current_count = 0 for child_idx in merge: if child_idx < n_samples: current_count += 1 # 叶子节点 else: current_count += counts[child_idx - n_samples] counts[i] = current_count linkage_matrix = np.column_stack([model.children_, model.distances_, counts]).astype(float) # 绘制对应的树状图 dendrogram(linkage_matrix, **kwargs)

现在,可以加载iris数据集,并使用AgglomerativeClustering算法进行聚类分析。将设置distance_threshold=0,以确保计算完整的树状图。然后,使用fit方法对数据进行拟合,并使用plot_dendrogram函数绘制树状图。

iris = load_iris() X = iris.data # 设置distance_threshold=0确保计算完整的树 model = AgglomerativeClustering(distance_threshold=0, n_clusters=None) model = model.fit(X) plt.title("层次聚类树状图") # 绘制树状图的前三个层级 plot_dendrogram(model, truncate_mode="level", p=3) plt.xlabel("节点中的点数(或如果没有括号,则为点的索引)") plt.show()

通过上述代码,成功地绘制了层次聚类的树状图。树状图的每个节点代表了一组数据点,节点之间的距离表示这些数据点之间的相似度。通过观察树状图,可以直观地了解数据点之间的相似度关系,从而为进一步的聚类分析提供参考。

本示例的运行时间为0分钟0.103秒。可以通过以下链接下载Jupyter notebook和Python源代码,以便在本地环境中运行和修改本示例。

相关示例:

  • 理解决策树结构
  • 在硬币图像上演示结构化的Ward层次聚类
  • 层次聚类:结构化与非结构化Ward的比较
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485