一文读懂层次聚类(Python代码)("Python实现层次聚类详解:一文轻松掌握")
原创
一、层次聚类简介
层次聚类(Hierarchical Clustering)是一种无监督学习算法,它通过逐步合并相似的数据点来形成聚类。层次聚类可以分为两种类型:凝聚的层次聚类(自底向上)和分裂的层次聚类(自顶向下)。本文重点介绍凝聚的层次聚类。
二、凝聚的层次聚类算法步骤
凝聚的层次聚类算法步骤如下:
- 将每个数据点作为一个单独的聚类。
- 计算所有聚类之间的相似度。
- 合并最相似的聚类。
- 更新聚类集合。
- 重复步骤2-4,直到只剩下一个聚类。
三、Python实现层次聚类
下面我们将使用Python实现层次聚类算法,重点使用scikit-learn库中的AgglomerativeClustering
类。
3.1 准备数据
首先,我们需要准备一些数据来演示层次聚类。这里我们使用一个易懂的二维数据集。
import numpy as np
from sklearn.datasets import make_blobs
# 生成数据
X, _ = make_blobs(n_samples=100, centers=4, cluster_std=0.5, random_state=0)
3.2 计算相似度矩阵
层次聚类需要计算数据点之间的相似度。我们可以使用距离度量,如欧氏距离。
from scipy.spatial.distance import pdist, squareform
# 计算距离矩阵
dist_matrix = squareform(pdist(X, metric='euclidean'))
3.3 创建层次聚类模型
接下来,我们使用scikit-learn的AgglomerativeClustering
创建一个层次聚类模型。
from sklearn.cluster import AgglomerativeClustering
# 创建层次聚类模型
cluster = AgglomerativeClustering(n_clusters=4, linkage='ward')
3.4 拟合模型并获取聚类因此
现在,我们可以使用模型对数据进行拟合,并获取聚类因此。
# 拟合模型
cluster.fit(X)
# 获取聚类标签
labels = cluster.labels_
3.5 可视化因此
最后,我们可以使用matplotlib库将聚类因此可视化。
import matplotlib.pyplot as plt
# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', marker='o')
plt.title('层次聚类因此')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
四、层次聚类的评估指标
评估层次聚类因此的好坏可以使用多种指标,如轮廓系数(Silhouette Coefficient)和Calinski-Harabasz指数等。这里我们以轮廓系数为例进行说明。
from sklearn.metrics import silhouette_score
# 计算轮廓系数
silhouette_avg = silhouette_score(X, labels)
print(f'轮廓系数: {silhouette_avg}')
五、层次聚类算法的优缺点
层次聚类算法具有以下优点:
- 算法易懂,易于实现。
- 不需要预先指定聚类数量。
但也存在以下缺点:
- 计算繁复度高,特别是对于大规模数据集。
- 一旦聚类合并,无法回溯。
六、总结
层次聚类是一种有效的无监督学习算法,通过逐步合并相似的数据点来形成聚类。本文详细介绍了Python实现层次聚类的方法,包括数据准备、相似度计算、模型创建、拟合和因此可视化。通过实例演示,我们轻松掌握了层次聚类的核心概念和实现技巧。
以上是使用HTML编写的文章内容,包含了层次聚类的简介、算法步骤、Python实现、评估指标、优缺点和总结。文章中的代码部分使用`
`标签进行排版,确保了代码的整洁和可读性。