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 以下(包括) cr 被最小化,使得不超过 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

一组长度数组 nT[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个集群。

最后,第四种情况的阈值足够大,可以将所有数据点合并在一起-因此返回单个集群。