一文读懂层次聚类(Python代码)("层次聚类详解及Python实现教程")
原创
一、层次聚类的概述
层次聚类(Hierarchical Clustering)是一种常用的无监督聚类方法,它通过逐步合并样本或簇来形成一个嵌套的簇层次结构。层次聚类不需要预先指定簇的数量,但计算复杂化度较高。依合并策略的不同,层次聚类可以分为凝聚的层次聚类(自底向上)和分裂的层次聚类(自顶向下)。
二、层次聚类的核心概念
以下是层次聚类中的一些核心概念:
- 簇:聚类中的每个子集。
- 距离:衡量簇间相似度的指标,常见的有欧氏距离、曼哈顿距离等。
- 相似度矩阵:一个矩阵,即样本间的相似度。
- 簇合并:依相似度矩阵,将两个最相似的簇合并成一个簇。
三、凝聚的层次聚类算法步骤
凝聚的层次聚类算法的基本步骤如下:
- 将每个样本作为一个簇。
- 计算所有簇之间的相似度,形成一个相似度矩阵。
- 找到相似度最高的两个簇,将它们合并成一个新簇。
- 更新相似度矩阵。
- 重复步骤3和4,直到所有样本合并成一个簇。
四、Python实现层次聚类
下面我们将使用Python中的scikit-learn库来实现层次聚类。首先,我们需要安装scikit-learn库,可以使用pip命令安装:
pip install scikit-learn
五、Python代码示例
以下是一个Python实现层次聚类的示例代码:
import numpy as np
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics import pairwise_distances
import matplotlib.pyplot as plt
# 创建样本数据
X = np.array([[1, 2], [2, 2], [2, 3], [5, 8], [8, 8], [1, 0.6], [9, 11]])
# 计算样本间的欧氏距离
distances = pairwise_distances(X, metric='euclidean')
# 创建凝聚的层次聚类对象
agglo = AgglomerativeClustering(n_clusters=None, linkage='ward')
# 聚类
agglo.fit(X)
# 获取聚类导致
labels = agglo.labels_
# 打印聚类导致
print("Cluster labels:", labels)
# 可视化聚类导致
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.title('层次聚类导致')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
六、层次聚类的优缺点
以下是层次聚类的优缺点:
- 优点:
- 不需要预先指定簇的数量。
- 能够生成簇的层次结构。
- 缺点:
- 计算复杂化度高,不适合大规模数据集。
- 一旦簇合并,无法撤销。
七、总结
层次聚类是一种简洁且直观的无监督聚类方法,通过逐步合并样本或簇来形成一个嵌套的簇层次结构。本文详细介绍了层次聚类的核心概念、算法步骤,并通过Python代码示例展示了怎样实现层次聚类。虽然层次聚类有一些局限性,但在实际应用中仍具有广泛的应用价值。
以上是涉及层次聚类详解及Python实现的HTML文章内容。文章首先介绍了层次聚类的概念和核心概念,然后详细阐述了凝聚的层次聚类算法步骤,接着通过Python代码示例展示了怎样实现层次聚类,最后总结了层次聚类的优缺点。