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’
|
connectivity | 连接矩阵。
|
compute_full_tree |
|
linkage | {‘ward’, ‘complete’, ‘average’, ‘single’}, default=’ward’ 计算两个簇之间的距离 |
distance_threshold |
|
3 返回内容
n_clusters_ | 簇的数量 (如果distance_threshold是None的画,等于给定的N_clusters) |
labels_ | 每个样本点的簇label |
n_leaves | 叶子节点的数量 |
children_ | 官方文档的说法:
|
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)合并