层次聚类是一种常用的聚类方法,它通过计算数据点间的距离,并逐步合并最相似的数据点或聚类来构建一个聚类树。在Python中,可以使用`scikit-learn`库中的`AgglomerativeClustering`类或者`scipy.cluster.hierarchy`模块中的`linkage`函数来实现层次聚类。
import numpy as np
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
生成随机数据
X, y = make_blobs(n_samples=100, centers=3, random_state=42)
使用AgglomerativeClustering进行层次聚类
clustering = AgglomerativeClustering(n_clusters=3)
clustering.fit(X)
可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=clustering.labels_, cmap='rainbow')
plt.show()
如果你想要使用`scipy.cluster.hierarchy`模块进行层次聚类,可以使用以下代码:
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
准备数据
X = np.array([[1, 2], [2, 2], [2, 3], [4, 5], [5, 6], [7, 8]])
计算数据点之间的相似度(距离)矩阵
Z = linkage(X, method='ward')
绘制树形图(谱系图)来可视化聚类结果
plt.figure(figsize=(10, 6))
dendrogram(Z)
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
plt.show()
层次聚类算法有分裂法和凝聚法两种方法,凝聚法更为常用。分裂法是从一个大的类开始,逐步分裂成更小的类,而凝聚法则是从每个样本作为一个单独的类开始,逐步合并最相似的类。
希望这些示例代码可以帮助你理解如何在Python中实现层次聚类。