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_每个样本点的簇labeln_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 AgglomerativeClustering
import numpy as np
X = 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)合并
版权归原作者 UQI-LIUWJ 所有, 如有侵权,请联系我们删除。