当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy hierarchy.fcluster用法及代码示例


本文简要介绍 python 语言中 scipy.cluster.hierarchy.fcluster 的用法。

用法:

scipy.cluster.hierarchy.fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None)#

从给定的链接矩阵定义的层次聚类中形成平面聚类。

参数

Z ndarray

linkage 函数返回的矩阵编码的层次聚类。

t 标量
对于标准‘inconsistent’, ‘distance’或‘monocrit’,

这是形成扁平集群时应用的阈值。

对于 ‘maxclust’ 或 ‘maxclust_monocrit’ 标准,

这将是请求的最大集群数。

criterion str,可选

用于生成扁平集群的标准。这可以是以下任何值:

inconsistent :

If a cluster node and all its descendants have an inconsistent value less than or equal to t, then all its leaf descendants belong to the same flat cluster. When no non-singleton cluster meets this criterion, every node is assigned to its own cluster. (Default)

distance :

Forms flat clusters so that the original observations in each flat cluster have no greater a cophenetic distance than t.

maxclust :

Finds a minimum threshold r so that the cophenetic distance between any two original observations in the same flat cluster is no more than r and no more than t flat clusters are formed.

monocrit :

Forms a flat cluster from a cluster node c with index i when monocrit[j] <= t.

For example, to threshold on the maximum mean distance as computed in the inconsistency matrix R with a threshold of 0.8 do:

MR = maxRstat(Z, R, 3)
fcluster(Z, t=0.8, criterion='monocrit', monocrit=MR)
maxclust_monocrit :

Forms a flat cluster from a non-singleton cluster node c when monocrit[i] <= r for all cluster indices i below and including c. r is minimized such that no more than t flat clusters are formed. monocrit must be monotonic. For example, to minimize the threshold t on maximum inconsistency values so that no more than 3 flat clusters are formed, do:

MI = maxinconsts(Z, R)
fcluster(Z, t=3, criterion='maxclust_monocrit', monocrit=MI)
depth 整数,可选

执行不一致性计算的最大深度。它对其他标准没有意义。默认值为 2。

R ndarray,可选

用于 'inconsistent' 标准的不一致矩阵。如果未提供,则计算该矩阵。

monocrit ndarray,可选

长度为 n-1 的数组。单体[i]是对非单例 i 进行阈值处理的统计量。 monocrit 向量必须是单调的,即给定一个索引为 i 的节点 c,对于所有节点索引 j 对应于 c 以下的节点,monocrit[i] >= monocrit[j].

返回

fcluster ndarray

长度为 n 的数组。 T[i] 是原始观测值i 所属的平面簇号。

例子

>>> 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 个集群。

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

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.cluster.hierarchy.fcluster。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。