层次聚类python代码
层次聚类是一种基于树状结构的聚类方法,它可以帮助将数据集划分成层次性的簇。在Python中,你可以使用scikit-learn
库来执行层次聚类。
pythonimport 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
参数来指定。
pythonmodel = AgglomerativeClustering(n_clusters=4, linkage='ward', affinity='euclidean')
簇数(n_clusters): 通过调整n_clusters
参数,你可以指定希望得到的最终簇的数量。
pythonmodel = AgglomerativeClustering(n_clusters=4, linkage='ward')
链接方式(linkage): 选择不同的链接方式对聚类结果产生影响。在上述代码中,使用了'ward',但也可以选择其他方式,如'complete'、'average'等。
pythonmodel = AgglomerativeClustering(n_clusters=4, linkage='complete')
树状图的可视化: 展示层次聚类的树状图可以帮助你更好地理解数据的聚类结构。在示例代码中,使用了dendrogram
函数来绘制树状图。
pythonlinkage_matrix = linkage(X, 'ward')
dendrogram(linkage_matrix)
plt.title('Hierarchical Clustering Dendrogram')
plt.show()