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


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


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

用法:

scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean', optimal_ordering=False)#

执行分层/凝聚聚类。

输入 y 可以是一维压缩距离矩阵或二维观察向量数组。

如果 y 是一维压缩距离矩阵,则 y 必须是 大小的向量,其中 n 是在距离矩阵中配对的原始观测值的数量。此函数的行为与 MATLAB 链接函数非常相似。

返回一个 x 4 矩阵Z。在 -th 迭代中,具有索引 Z[i, 0]Z[i, 1] 的集群组合形成集群 。索引小于 的集群对应于 原始观测值之一。簇 Z[i, 0]Z[i, 1] 之间的距离由 Z[i, 2] 给出。第四个值Z[i, 3] 表示新形成的聚类中原始观测值的数量。

以下链接方法用于计算两个簇 之间的距离 。该算法从尚未在正在形成的层次结构中使用的集群森林开始。当来自该林的两个集群 组合成一个集群时, 将从森林中删除,并将 添加到森林中。当森林中只剩下一个簇时,算法停止,这个簇成为根。

每次迭代都维护一个距离矩阵。 d[i,j] 条目对应于原始森林中簇 之间的距离。

在每次迭代中,算法必须更新距离矩阵以反映新形成的集群 u 与森林中剩余集群的距离。

假设在集群 中有 原始观测值 ,在集群 中有 原始对象 。回想一下, 组合在一起形成集群 。让 是林中不是 的任何剩余集群。

以下是计算新形成的簇 和每个 之间距离的方法。

  • method=’single’ assigns

    for all points in cluster and in cluster . This is also known as the Nearest Point Algorithm.

  • method=’complete’ assigns

    for all points in cluster u and in cluster . This is also known by the Farthest Point Algorithm or Voor Hees Algorithm.

  • method=’average’ assigns

    for all points and where and are the cardinalities of clusters and , respectively. This is also called the UPGMA algorithm.

  • method=’weighted’ assigns

    where cluster u was formed with cluster s and t and v is a remaining cluster in the forest (also called WPGMA).

  • method=’centroid’ assigns

    where and are the centroids of clusters and , respectively. When two clusters and are combined into a new cluster , the new centroid is computed over all the original objects in clusters and . The distance then becomes the Euclidean distance between the centroid of and the centroid of a remaining cluster in the forest. This is also known as the UPGMC algorithm.

  • method=’median’ assigns like the centroid method. When two clusters and are combined into a new cluster , the average of centroids s and t give the new centroid . This is also known as the WPGMC algorithm.

  • method=’ward’ uses the Ward variance minimization algorithm. The new entry is computed as follows,

    where is the newly joined cluster consisting of clusters and , is an unused cluster in the forest, , and is the cardinality of its argument. This is also known as the incremental algorithm.

警告:选择森林中的最小距离对时,可能有两个或更多对具有相同的最小距离。此实现可以选择与 MATLAB 版本不同的最小值。

参数

y ndarray

一个压缩的距离矩阵。压缩距离矩阵是包含距离矩阵的上三角形的平面阵列。这是pdist 返回的形式。或者, 维度中的 观察向量的集合可以作为 数组传递。压缩距离矩阵的所有元素都必须是有限的,即没有 NaNs 或 infs。

method str,可选

要使用的链接算法。有关完整说明,请参阅下面的 Linkage Methods 部分。

metric str 或函数,可选

在 y 是观察向量集合的情况下使用的距离度量;否则忽略。有关有效距离度量的列表,请参阅pdist 函数。也可以使用自定义距离函数。

optimal_ordering 布尔型,可选

如果为 True,则链接矩阵将重新排序,以便连续叶子之间的距离最小。当数据可视化时,这会产生更直观的树结构。默认为 False,因为该算法可能很慢,特别是在大型数据集上 [2]。另请参见 optimal_leaf_ordering 函数。

返回

Z ndarray

层次聚类编码为链接矩阵。

注意

  1. 对于方法‘single’,实现了基于最小生成树的优化算法。它的时间复杂度为 。对于方法‘complete’, ‘average’, ‘weighted’和‘ward’,实现了一种称为nearest-neighbors链的算法。它还具有时间复杂度 。对于其他方法,以 时间复杂度实现朴素算法。所有算法都使用 内存。有关算法的详细信息,请参阅[1]。

  2. 仅当使用欧几里德成对度量时,方法 ‘centroid’, ‘median’ 和 ‘ward’ 才能正确定义。如果 y 作为预先计算的成对距离传递,则用户有责任确保这些距离实际上是欧几里得距离,否则生成的结果将不正确。

参考

[1]

Daniel Mullner,“现代层次、凝聚聚类算法”,arXiv:1109.2378v1

[2]

Ziv Bar-Joseph、David K. Gifford、Tommi S. Jaakkola,“层次聚类的快速最优叶排序”,2001 年。生物信息学 DOI:10.1093/bioinformatics/17.suppl_1.S22

例子

>>> from scipy.cluster.hierarchy import dendrogram, linkage
>>> from matplotlib import pyplot as plt
>>> X = [[i] for i in [2, 8, 0, 4, 1, 9, 9, 0]]
>>> Z = linkage(X, 'ward')
>>> fig = plt.figure(figsize=(25, 10))
>>> dn = dendrogram(Z)
>>> Z = linkage(X, 'single')
>>> fig = plt.figure(figsize=(25, 10))
>>> dn = dendrogram(Z)
>>> plt.show()
scipy-cluster-hierarchy-linkage-1_00.png
scipy-cluster-hierarchy-linkage-1_01.png

相关用法


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