一、层次聚类简介

层次聚类方法属于无监督学习,将数据集分成指定的聚类个数。

根据具体实现方法的不同,分为凝聚聚类(自底向上)、分裂聚类(自顶向下)

无监督亚型聚类 深度学习 无监督分层聚类_自底向上

1、凝聚聚类(自底向上)

例如,AGNES,Agglomerative Nesting

算法步骤:

  1. 将每个样本点都看作一个独立的簇,
  2. 计算所有簇之间的距离,
  3. 找到距离最近的两个簇进行合并,,重复2,直到达到聚类个数或其他终止条件

2、分裂聚类(自顶向下)

例如,DIANA,Divisive Analysis

算法步骤:

  1. 将所有样本点都看作一个簇
  2. 计算簇中所有样本之间的距离
  3. 找到簇中距离最远的两个样本点i、j,并将其设置为两个新簇的中心点
  4. 对于原簇中剩余的所有点,计算其与i、j之间的距离,并将其划分到距离更近的那个点的簇中
  5. 重复2、3、4,直到达到指定簇数,或满足终止条件

二、距离

1、欧氏距离

2、曼哈顿距离

3、余弦距离

三、度量方法

1、最小距离

最小距离由两个簇的最近样本决定 => 单链接(single-linkage)算法

无监督亚型聚类 深度学习 无监督分层聚类_聚类_02

2、最大距离

最大距离由两个簇的最远样本决定 => 全链接(complete-linkage)算法

无监督亚型聚类 深度学习 无监督分层聚类_无监督亚型聚类 深度学习_03

3、平均距离

平均距离由两个簇的所有样本共同决定 => 均链接(average-linkage)算法

无监督亚型聚类 深度学习 无监督分层聚类_聚类_04

4、均值距离

均值距离由两个簇的中心点之间的距离决定,其中,簇的中心点为其中所有样本点的平均值

无监督亚型聚类 深度学习 无监督分层聚类_层次聚类_05

四、 优缺点

优点

  1. 规则简单
  2. 可以发现样本点之间的层次关系

缺点

  1. 计算复杂度高
  2. 对异常点敏感
  3. 对异形样本点可能聚类效果不好

五、工具-sklearn

工具-sklearn sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=‘euclidean’, memory=None, connectivity=None, compute_full_tree=‘auto’, linkage=‘ward’, distance_threshold=None)

  • n_clusters:聚类簇数,默认为2
  • affinity:距离计算参数,默认为"euclidean"。可选参数包括l1、l2、“manhattan”, “cosine”,“precomputed”。
  • linkage: {“ward”, “complete”, “average”, “single”}, optional (default=”ward”)
    其中,
    “ward”将合并的聚类的方差最小化。
    “average”使用两个集合中每个观测值的距离的平均值。
    “complete”或“maximum”链接使用两个集合的所有观测值之间的最大距离。
    “single”使用两个集合的所有观测值之间的最小距离。

五、层次图可视化

from scipy.cluster.hierarchy import dendrogram, ward

linkage_matrix = ward(train_x)
dendrogram(linkage_matrix)
plt.show()