领导者#
- scipy.cluster.hierarchy.leaders(Z, T)[源代码][源代码]#
返回层次聚类中的根节点。
返回层次聚类中对应于由平面聚类分配向量
T
定义的切割的根节点。有关T
格式的更多信息,请参见fcluster
函数。对于n大小的平面聚类分配向量``T``中表示的每个平面聚类 \(j\) 及其 \(k\) 个平面聚类,此函数在链接树Z中找到最低的聚类节点 \(i\),使得:
叶后代仅属于平面簇 j(即,对于所有 \(p\) 在 \(S(i)\) 中,
T[p]==j
,其中 \(S(i)\) 是具有簇节点 \(i\) 的叶后代节点的叶 ID 集合)不存在一个叶子节点,它不是 \(i\) 的后代,同时也属于簇 \(j\) (即,对于所有不在 \(S(i)\) 中的 \(q\) ,
T[q]!=j
)。如果违反了这个条件,T
不是一个有效的簇分配向量,并且会抛出一个异常。
- 参数:
- Zndarray
编码为矩阵的层次聚类。更多信息请参见
linkage
。- Tndarray
扁平聚类分配向量。
- 返回:
- Lndarray
领导者链接节点ID存储为一个k元素的一维数组,其中
k
是T
中找到的平面簇的数量。L[j]=i
是链接簇节点ID,该节点是ID为M[j]的扁平簇的领导者。如果i < n
,i
对应于一个原始观察,否则它对应于一个非单例簇。- Mndarray
领导者链接节点ID存储为一个k元素的1维数组,其中``k``是``T``中找到的平面簇的数量。这允许平面簇ID集为任意一组``k``个整数。
例如:如果
L[3]=2
且M[3]=8
,则ID为8的扁平簇的领导者是链接节点2。
参见
fcluster
用于创建平面聚类分配。
示例
>>> from scipy.cluster.hierarchy import ward, fcluster, leaders >>> from scipy.spatial.distance import pdist
给定一个链接矩阵
Z
- 在将聚类方法应用于数据集X
后获得 - 和一个平面聚类分配数组T
:>>> X = [[0, 0], [0, 1], [1, 0], ... [0, 4], [0, 3], [1, 4], ... [4, 0], [3, 0], [4, 1], ... [4, 4], [3, 4], [4, 3]]
>>> Z = ward(pdist(X)) >>> Z array([[ 0. , 1. , 1. , 2. ], [ 3. , 4. , 1. , 2. ], [ 6. , 7. , 1. , 2. ], [ 9. , 10. , 1. , 2. ], [ 2. , 12. , 1.29099445, 3. ], [ 5. , 13. , 1.29099445, 3. ], [ 8. , 14. , 1.29099445, 3. ], [11. , 15. , 1.29099445, 3. ], [16. , 17. , 5.77350269, 6. ], [18. , 19. , 5.77350269, 6. ], [20. , 21. , 8.16496581, 12. ]])
>>> T = fcluster(Z, 3, criterion='distance') >>> T array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)
scipy.cluster.hierarchy.leaders
返回树状图中每个扁平簇的领导节点的索引:>>> L, M = leaders(Z, T) >>> L array([16, 17, 18, 19], dtype=int32)
(记住,索引0-11指向``X``中的12个数据点,而索引12-22指向``Z``的11行)
scipy.cluster.hierarchy.leaders
还会返回T
中扁平簇的索引:>>> M array([1, 2, 3, 4], dtype=int32)