层次聚类python代码

层次聚类是一种基于树状结构的聚类方法,它可以帮助将数据集划分成层次性的簇。在Python中,你可以使用scikit-learn库来执行层次聚类。

python
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.cluster import AgglomerativeClustering from scipy.cluster.hierarchy import dendrogram, linkage # 创建一个示例数据集 X, y = make_blobs(n_samples=300, centers=4, random_state=42) # 使用层次聚类 # linkage参数定义了链接算法,'ward'表示使用ward方差最小化算法 # n_clusters参数定义了最终聚类的簇数 model = AgglomerativeClustering(n_clusters=4, linkage='ward') model.fit(X) # 绘制聚类结果 plt.scatter(X[:, 0], X[:, 1], c=model.labels_, cmap='rainbow') plt.title('Hierarchical Clustering') plt.show() # 绘制树状图 linkage_matrix = linkage(X, 'ward') dendrogram(linkage_matrix) plt.title('Hierarchical Clustering Dendrogram') plt.show()

在上面的代码中,首先创建了一个示例数据集,然后使用AgglomerativeClustering执行层次聚类。最后,通过绘制散点图和树状图来展示聚类结果。

linkage参数定义了用于计算簇之间距离的链接算法。在示例中,使用了'ward'链接算法,它尽量使得簇的方差增加最小。你可以根据你的数据和需求选择其他链接算法,例如'complete'、'average'等。

记得根据你的数据集和实际需求进行适当的调整。

当进行层次聚类时,除了上述代码中的参数,还有其他一些参数可以进行调整,以便更好地满足你的需求。

距离度量(metric): 在层次聚类中,你可以选择不同的距离度量方法,例如欧氏距离、曼哈顿距离等。在AgglomerativeClustering中,通过affinity参数来指定。

python
model = AgglomerativeClustering(n_clusters=4, linkage='ward', affinity='euclidean')

簇数(n_clusters): 通过调整n_clusters参数,你可以指定希望得到的最终簇的数量。

python
model = AgglomerativeClustering(n_clusters=4, linkage='ward')

链接方式(linkage): 选择不同的链接方式对聚类结果产生影响。在上述代码中,使用了'ward',但也可以选择其他方式,如'complete'、'average'等。

python
model = AgglomerativeClustering(n_clusters=4, linkage='complete')

树状图的可视化: 展示层次聚类的树状图可以帮助你更好地理解数据的聚类结构。在示例代码中,使用了dendrogram函数来绘制树状图。

python
linkage_matrix = linkage(X, 'ward') dendrogram(linkage_matrix) plt.title('Hierarchical Clustering Dendrogram') plt.show()

标签