scipy.cluster.hierarchy.fcluster¶
- scipy.cluster.hierarchy.fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None)[源代码]¶
从由给定链接矩阵定义的分层聚类形成扁平聚类。
- 参数
- Zndarray
方法返回的矩阵编码的层次结构群集。
linkage
功能。- t标量
- 对于标准“不一致”、“距离”或“单角体”,
这是形成扁平簇时要应用的阈值。
- 对于‘maxcluster’或‘maxcluster_monocritt’标准,
这将是请求的最大群集数。
- criterion字符串,可选
用于形成扁平群集的标准。它可以是下列值中的任何一个:
inconsistent
:如果群集节点及其所有子节点具有小于或等于 t ,那么它的所有叶子后代都属于同一平坦簇。如果没有符合此条件的非单一群集,则每个节点都会分配到其自己的群集。(默认)
distance
:形成扁平星团,使得每个扁平星团中的原始观测值的共生距离不大于 t 。
maxclust
:查找最小阈值
r
使得同一平坦星团中任意两个原始观测之间的共生距离不大于r
而且不会超过 t 形成扁平星团。monocrit
:在以下情况下,从索引为i的群集节点c形成平面群集
monocrit[j] <= t
。例如,要使用阈值0.8在不一致矩阵R中计算的最大平均距离上设置阈值,请执行以下操作:
MR = maxRstat(Z, R, 3) fcluster(Z, t=0.8, criterion='monocrit', monocrit=MR)
maxclust_monocrit
:从非单一群集节点形成平面群集
c
什么时候monocrit[i] <= r
对于所有群集索引i
以下(包括)c
。r
被最小化,使得不超过t
形成扁平星团。单字必须是单调的。例如,要最小化最大不一致值的阈值t,以便形成不超过3个平面群集,请执行以下操作:MI = maxinconsts(Z, R) fcluster(Z, t=3, criterion='maxclust_monocrit', monocrit=MI)
- depth整型,可选
执行不一致性计算的最大深度。这对其他标准没有意义。默认值为2。
- Rndarray,可选
用于“不一致”标准的不一致矩阵。如果未提供此矩阵,则计算此矩阵。
- monocritndarray,可选
长度为n-1的数组。 monocrit[i] 是对非单例I进行阈值处理的统计数据。对于对应于c以下节点的所有节点索引j,单调向量必须是单调的,即给定具有索引i的节点c,
monocrit[i] >= monocrit[j]
。
- 退货
- fclusterndarray
一组长度数组
n
。T[i]
是原始观测到的平面聚类号i
属于这里。
参见
linkage
有关层次聚类方法工作的信息,请参阅。
示例
>>> from scipy.cluster.hierarchy import ward, fcluster >>> from scipy.spatial.distance import pdist
所有集群链接方法-例如,
scipy.cluster.hierarchy.ward
生成链接矩阵Z
作为他们的输出:>>> 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. ]])
该矩阵表示树状图,其中第一和第二元素是在每个步骤合并的两个簇,第三个元素是这些簇之间的距离,第四个元素是新簇的大小-包括的原始数据点的数量。
scipy.cluster.hierarchy.fcluster
可用于展平树状图,从而获得将原始数据点分配给单个群集的结果。此指定在很大程度上取决于距离阈值
t
-允许的最大集群间距离:>>> fcluster(Z, t=0.9, criterion='distance') array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], dtype=int32)
>>> fcluster(Z, t=1.1, criterion='distance') array([1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8], dtype=int32)
>>> fcluster(Z, t=3, criterion='distance') array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)
>>> fcluster(Z, t=9, criterion='distance') array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)
在第一种情况下,阈值
t
太小,不能让数据中的任何两个样本组成一个簇,因此返回12个不同的簇。在第二种情况下,阈值足够大,以允许前4个点与其最近的邻居合并。所以,这里只返回了8个簇。
第三种情况的阈值要高得多,最多可以连接8个数据点-因此这里返回4个集群。
最后,第四种情况的阈值足够大,可以将所有数据点合并在一起-因此返回单个集群。