一、层次聚类简介
层次聚类,也称为连锁聚类,顾名思义,便是将数据点逐层聚合的过程,直到构造出一棵树形结构,完成聚类。这个过程中,我们可以通过选择不同的距离度量方式和决策法则,得到不同的聚类效果。
其中,距离度量方式包括曼哈顿距离、欧式距离、切比雪夫距离等;决策法则包括单连接、全连接和平均连接等形式。
在建立层次聚类的过程中,我们不需要设定聚类的数量,而是通过树形结构的“高”和“低”来进行聚类的控制。最后,通过剪枝和划分树形结构,得到想要的聚类数量。
二、Python层次聚类的实现
Python中层次聚类主要通过scipy库进行实现。scipy.cluster.hierarchy模块提供了实现层次聚类所需的工具函数和类。该模块主要提供以下函数:
linkage(y, method='single', metric='euclidean', optimal_ordering=False)
- y:待聚类的距离矩阵或待聚类的数据集
- method:指定线段之间的距离计算方法
- metric:指定向量间的距离计算方法
- optimal_ordering:是否进行优化排序
以下是实现Python层次聚类的示例代码:
import scipy.cluster.hierarchy as sch import numpy as np X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) Z = sch.linkage(X, 'ward')
三、距离计算方式的选择
层次聚类核心是计算数据点之间的距离,根据不同的距离计算方法,得到的聚类结果也不同。常见的距离计算方式包括欧式距离、曼哈顿距离、切比雪夫距离和闵可夫斯基距离。
以计算欧式距离为例,以下是示例代码:
import numpy as np from scipy.spatial.distance import pdist X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) D = pdist(X, metric='euclidean')
四、决策法则的选择
决策法则是指在进行样本聚类的过程中,在已经选择的类别之间确定样本点之间的距离。常见的决策法则有单连接、全连接和平均连接等。
以选择平均连接为例,以下是示例代码:
import scipy.cluster.hierarchy as sch import numpy as np X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) Z = sch.linkage(X, method='average')
五、决策树的可视化
通过可视化层次聚类的决策树,可以更清晰地理解聚类的过程和结果。
以下是利用matplotlib库实现层次聚类可视化的示例代码:
import scipy.cluster.hierarchy as sch import numpy as np import matplotlib.pylab as plt X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) Z = sch.linkage(X, method='average') plt.figure(figsize=(10, 6)) sch.dendrogram(Z) plt.show()
六、层次聚类的优点和缺点
优点:
- 适用于不同的数据类型、不同的距离度量方式和决策法则。
- 通过树形结构直观地表示了聚类的过程和结果。
- 对于小样本聚类效果较好。
缺点:
- 层次聚类计算量巨大,时间复杂度高。
- 对于大数据量的聚类效果不佳。
- 树形结构难以直观地解释聚类的数量和结构。