1 方法介绍

sklearn.cluster.AgglomerativeClustering(    n_clusters=2,     *,     affinity='deprecated',     metric=None,     memory=None,     connectivity=None,     compute_full_tree='auto',     linkage='ward',     distance_threshold=None,     compute_distances=False)

2 参数介绍

n_clusters

需要分成几个cluster?

如果distance_threshold不是None,那么n_clusters需要是None’

metric

计算距离的方式

可以是‘euclidean’,‘l1′,’l2′,’manhattan’,’cosine’,’precomputed’

  • 如果设置为None,那么默认是使用’euclidean‘
  • 如果linkage是’ward‘,那么只有’euclidean‘
  • 如果是’precomputed’,那么需要提供一个距离矩阵
connectivity

连接矩阵。

  • 为每个样本定义遵循给定数据结构的相邻样本。
  • 这可以是连接矩阵本身,也可以是将数据转换为连接矩阵的可调用对象,例如从 kneighbors_graph 派生的。
  • 默认为None,即层次聚类算法是非结构化的。(所有样本之间都是互相连接的)
compute_full_tree
  • 当已经合并至n_cluster数量的簇之后,停止生成数
  • 这个可以节省计算时间
  • 如果distance_threshold不是None,compute_full_tree必须时True
  • 默认情况下compute_full_tree是’auto’
    • 如果distance_threshold 不是None,那么compute_full_tree是True
    • 如果n_clusters比max(100,0.02*n_samples)小,那么compute_full_tree是True
    • 其他情况下,compute_full_tree是False
linkage

{‘ward’, ‘complete’, ‘average’, ‘single’}, default=’ward’

计算两个簇之间的距离

distance_threshold

  • 两个簇之间的距离大于这个值时,cluster不再合并
  • 如果distance_threshold不是None,那么n_cluster必须是None,compute_full_tree必须是True

3 返回内容

n_clusters_

簇的数量

(如果distance_threshold是None的画,等于给定的N_clusters)

labels_每个样本点的簇label
n_leaves叶子节点的数量
children_

官方文档的说法:

  • 每个非叶节点的子节点。
    • 小于 n_samples 的值对应于作为原始样本的树的叶子。
    • 大于或等于 n_samples 的节点 i 是非叶节点,并且有子节点 children_[i – n_samples]。
    • 或者,在第 i 次迭代中,children[i][0] 和 children[i][1] 合并形成节点 n_samples + i。

4 举例

from sklearn.cluster import AgglomerativeClusteringimport numpy as npX = np.array([[1, 2], [1, 4], [1, 0],               [4, 2], [4, 4], [4, 0]])clustering = AgglomerativeClustering().fit(X)clustering.labels_#array([1, 1, 1, 0, 0, 0], dtype=int64)clustering.children_'''array([[0, 1],       [3, 5],       [2, 6],       [4, 7],       [8, 9]], dtype=int64)'''

这里的children怎么理解呢?

  • 原来有0,1,2,3,4,5,一共六个叶子节点
  • 第一行[0,1]——>[0],[1]两个叶子节点(两个簇)合并,成为6号非叶节点
  • 第二行[3,5]——>[3],[5]两个叶子节点(两个簇)合并,成为7号非叶节点
  • 第三行[2,6]——>叶子节点[2]和非叶节点[6]([0,1])合并,成为8号非叶节点(0,1,2)
  • 第四行[4,7]——>叶子节点[4]和非叶节点[7]([3,5])合并,成为9号非叶节点(3,4,5)
  • 第五行[8,9]——>非叶节点[8](0,1,2)和非叶节点[9](3,4,5)合并