您的位置:

Python层次聚类

一、层次聚类简介

层次聚类,也称为连锁聚类,顾名思义,便是将数据点逐层聚合的过程,直到构造出一棵树形结构,完成聚类。这个过程中,我们可以通过选择不同的距离度量方式和决策法则,得到不同的聚类效果。

其中,距离度量方式包括曼哈顿距离、欧式距离、切比雪夫距离等;决策法则包括单连接、全连接和平均连接等形式。

在建立层次聚类的过程中,我们不需要设定聚类的数量,而是通过树形结构的“高”和“低”来进行聚类的控制。最后,通过剪枝和划分树形结构,得到想要的聚类数量。

二、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()

六、层次聚类的优点和缺点

优点:

  • 适用于不同的数据类型、不同的距离度量方式和决策法则。
  • 通过树形结构直观地表示了聚类的过程和结果。
  • 对于小样本聚类效果较好。

缺点:

  • 层次聚类计算量巨大,时间复杂度高。
  • 对于大数据量的聚类效果不佳。
  • 树形结构难以直观地解释聚类的数量和结构。