层次聚类分析

层次聚类是一种常用的聚类方法,它不需要事先指定聚类的数量,而是生成一个聚类层次结构。在本文中,将使用AgglomerativeClustering算法和scipy库中的dendrogram方法来展示如何进行层次聚类分析。AgglomerativeClustering算法是一种自底向上的聚类方法,它从每个样本点作为一个单独的聚类开始,然后逐渐合并这些聚类,直到所有的样本点都合并成一个聚类。

为了更好地理解层次聚类的过程,首先需要了解dendrogram的概念。dendrogram是一种树状图,用于展示层次聚类的结果。在dendrogram中,每个节点代表一个聚类,而节点之间的连线表示聚类之间的合并。通过观察dendrogram,可以直观地了解聚类的结构和层次关系。

在进行层次聚类分析之前,需要准备一些必要的库和数据。将使用numpy库来处理数值计算,matplotlib库来绘制图形,scipy库中的hierarchy模块来生成dendrogram,以及sklearn库中的datasets模块来加载数据集。

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。在这个函数中,首先创建一个链接矩阵,然后使用dendrogram方法来绘制dendrogram。链接矩阵包含了每个节点的子节点、距离和样本点的数量等信息。通过这些信息,可以生成一个完整的dendrogram。

def plot_dendrogram(model, **kwargs): # Create linkage matrix and then plot the dendrogram # create the counts of samples under each node 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 # leaf node else: current_count += counts[child_idx - n_samples] counts[i] = current_count linkage_matrix = np.column_stack([model.children_, model.distances_, counts]).astype(float) # Plot the corresponding dendrogram dendrogram(linkage_matrix, **kwargs)

现在,已经准备好了所有必要的工具和函数。接下来,将使用AgglomerativeClustering算法来对iris数据集进行层次聚类分析。iris数据集是一个著名的多变量数据集,包含了150个样本点和4个特征。将使用这个数据集来展示层次聚类的效果。

iris = load_iris() X = iris.data # setting distance_threshold=0 ensures we compute the full tree. model = AgglomerativeClustering(distance_threshold=0, n_clusters=None) model = model.fit(X) plt.title("Hierarchical Clustering Dendrogram") # plot the top three levels of the dendrogram plot_dendrogram(model, truncate_mode="level", p=3) plt.xlabel("Number of points in node (or index of point if no parenthesis).") plt.show()

通过上述代码,可以生成一个层次聚类的dendrogram。在这个dendrogram中,每个节点代表一个聚类,而节点之间的连线表示聚类之间的合并。通过观察这个dendrogram,可以直观地了解聚类的结构和层次关系。例如,可以看到哪些聚类在早期就被合并,哪些聚类在后期才被合并。这些信息对于理解数据集的结构和特征非常有用。

层次聚类分析是一种非常灵活和强大的聚类方法,它可以应用于各种不同的数据集和应用场景。通过使用AgglomerativeClustering算法和dendrogram方法,可以更好地理解数据集的结构和特征,从而为进一步的数据分析和处理提供有力的支持。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485