标签: hierarchical-clustering

在scipy.cluster.hierarchy.linkage()中使用距离矩阵?

我有一个距离矩阵N*N M,其中M_ij是之间的距离object_iobject_j.正如预期的那样,它采用以下形式:

   /  0     M_01    M_02    ...    M_0n\
   | M_10    0      M_12    ...    M_1n |
   | M_20   M_21     0      ...    M2_n |
   |                ...                 |
   \ M_n0   M_n2    M_n2    ...      0 / 
Run Code Online (Sandbox Code Playgroud)

现在我希望用层次聚类来聚类这些n个对象.Python有一个这样的实现scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean').

它的文件说:

y必须是{n\choose 2}大小的向量,其中n是在距离矩阵中配对的原始观测数.

y:ndarray

精简或冗余距离矩阵.压缩距离矩阵是包含距离矩阵的上三角形的平面阵列.这是pdist返回的形式.或者,n维的m个观察向量的集合可以作为m×n阵列传递.

我对此描述感到困惑y.我可以直接M输入我的输入y吗?


更新

@ hongbo-zhu-cn 在GitHub上提出了这个问题.这正是我所关心的.但是,作为GitHub的新手,我不知道它是如何工作的,因此不知道如何处理这个问题.

python hierarchical-clustering scipy

34
推荐指数
2
解决办法
2万
查看次数

scipy.cluster.hierarchy教程

我试图理解如何操纵层次结构集群,但文档太......技术性?......我无法理解它是如何工作的.

是否有任何教程可以帮助我开始,逐步解释一些简单的任务?

假设我有以下数据集:

a = np.array([[0,   0  ],
              [1,   0  ],
              [0,   1  ],
              [1,   1  ], 
              [0.5, 0  ],
              [0,   0.5],
              [0.5, 0.5],
              [2,   2  ],
              [2,   3  ],
              [3,   2  ],
              [3,   3  ]])
Run Code Online (Sandbox Code Playgroud)

我可以轻松地完成层次结构聚类并绘制树形图:

z = linkage(a)
d = dendrogram(z)
Run Code Online (Sandbox Code Playgroud)
  • 现在,我如何恢复特定群集?让我们说[0,1,2,4,5,6]树状图中有元素的那个?
  • 我怎样才能找回那些元素的价值?

python hierarchical-clustering scipy

33
推荐指数
1
解决办法
4万
查看次数

使用Levenshtein距离进行文本聚类

我有一组(2k - 4k)的小字符串(3-6个字符),我想将它们聚类.由于我使用字符串,以前的答案关于如何进行聚类(尤其是字符串聚类)?,告诉我,Levenshtein距离很适合用作弦乐的距离函数.此外,由于我事先并不知道群集的数量,因此分层聚类是要走的路而不是k-means.

虽然我以抽象的形式得到问题,但我不知道实际做什么的简单方法.例如,MATLAB或R是使用自定义函数(Levenshtein距离)实际实现层次聚类的更好选择.对于这两种软件,人们可以很容易地找到Levenshtein距离实现.聚类部分似乎更难.例如,MATLAB中的聚类文本计算所有字符串的距离数组,但我无法理解如何使用距离数组来实际获得聚类.你能不能向大家们展示如何在MATLAB或R中使用自定义函数实现层次聚类的方法?

matlab r cluster-analysis hierarchical-clustering levenshtein-distance

31
推荐指数
1
解决办法
2万
查看次数

R(热图与热图2)中热图/聚类默认值的差异?

我比较R中树状图,一个与创建热图的两个方面made4heatplot,一个用gplotsheatmap.2.适当的结果取决于分析,但我试图理解为什么默认值是如此不同,以及如何让两个函数给出相同的结果(或高度相似的结果),以便我理解所有'blackbox'参数进入这个.

这是示例数据和包:

require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])
Run Code Online (Sandbox Code Playgroud)

使用heatmap.2对数据进行聚类得出:

heatmap.2(data, trace="none")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

使用heatplot给出:

heatplot(data)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

最初的结果和缩放非常不同.heatplot在这种情况下,结果看起来更合理,所以我想了解要用heatmap.2它来做同样的参数,因为heatmap.2我有其他优点/功能我想使用,因为我想了解缺少的成分.

heatplot使用具有相关距离的平均链接,以便我们可以将其输入heatmap.2以确保使用类似的聚类(基于:https://stat.ethz.ch/pipermail/bioconductor/2010-August/034757.html)

dist.pear <- function(x) as.dist(1-cor(t(x)))
hclust.ave <- function(x) hclust(x, method="average")
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave)
Run Code Online (Sandbox Code Playgroud)

导致: 在此输入图像描述

这使得行侧树状图看起来更相似但是列仍然不同,因此比例也是如此.看来,heatplot默认情况下,以某种方式缩放列,默认情况下heatmap.2不会这样做.如果我向heatmap.2添加行缩放,我得到:

heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave,scale="row")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它仍然不相同但更接近.我怎样才能重现heatplot结果heatmap.2?有什么区别?

edit2:看起来关键的区别在于使用以下方法重新heatplot调整行和列的数据:

if (dualScale) {
    print(paste("Data (original) range: …
Run Code Online (Sandbox Code Playgroud)

r cluster-analysis hierarchical-clustering heatmap bioconductor

27
推荐指数
1
解决办法
4万
查看次数

基于距离矩阵的聚类

我的目标是根据单词与文本文档集相似的方式对单词进行聚类.我计算了每对单词之间的Jaccard相似度.换句话说,我有一个稀疏的距离矩阵.任何人都可以指向任何以距离矩阵为输入的聚类算法(可能还有Python中的库)吗?我也事先不知道簇的数量.我只想聚集这些单词并获得哪些单词聚集在一起.

python hierarchical-clustering cluster-computing scikit-learn

22
推荐指数
2
解决办法
2万
查看次数

分布式层次聚类

是否有任何算法可以帮助进行分层聚类?谷歌的map-reduce只有一个k-clustering的例子.在分层聚类的情况下,我不确定如何在节点之间划分工作.我找到的其他资源是:http://issues.apache.org/jira/browse/MAHOUT-19 但是,使用哪种算法并不明显.

algorithm cluster-analysis hierarchical-clustering

21
推荐指数
1
解决办法
7106
查看次数

如何给sns.clustermap一个预先计算的距离矩阵?

通常当我做树形图和热图时,我使用距离矩阵并做一堆SciPy东西.我想尝试SeabornSeaborn想要我的数据是矩形的(行=样本,cols =属性,而不是距离矩阵)?

我本质上想seaborn用作后端来计算我的树形图并将其粘贴到我的热图上.这可能吗?如果没有,这可能是未来的特色.

也许有我可以调整的参数,所以它可以采用距离矩阵而不是矩形矩阵?

这是用法:

seaborn.clustermap¶
seaborn.clustermap(data, pivot_kws=None, method='average', metric='euclidean',
 z_score=None, standard_scale=None, figsize=None, cbar_kws=None, row_cluster=True,
 col_cluster=True, row_linkage=None, col_linkage=None, row_colors=None,
 col_colors=None, mask=None, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
DF = pd.DataFrame(X, index = ["iris_%d" % (i) for i in range(X.shape[0])], columns = iris.feature_names)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我不认为我的方法在下面是正确的,因为我给它一个预先计算的距离矩阵,而不是它要求的矩形数据矩阵.没有关于如何使用相关/距离矩阵的示例,clustermap但有https://stanford.edu/~mwaskom/software/seaborn/examples/network_correlations.html,但排序没有与普通sns.heatmap功能集群.

DF_corr = DF.T.corr()
DF_dism = 1 - DF_corr
sns.clustermap(DF_dism)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python hierarchical-clustering matplotlib heatmap seaborn

21
推荐指数
1
解决办法
6442
查看次数

标记层次结构和处理

这是一个真正的问题,一般适用于标记项目(是的,这也适用于StackOverflow,不,这不是关于StackOverflow的问题).

整个标记问题有助于聚类类似的项目,无论它们是什么项目(笑话,博客帖子,所以问题等).但是,(通常但不严格)是标签的层次结构,这意味着某些标签也暗示其他标签.使用一个熟悉的例子,"c#"so标签也暗示".net"; 另一个例子,在笑话数据库中,"blondes"标签暗示"嘲弄"标签,类似于"爱尔兰"或"belge"或"加拿大"等,取决于笑话的国家来源.

你是如何在项目中处理这个问题的?我将提供一个答案,描述我在两个不同的情况下使用的两种不同的方法(实际上,相同的机制,但在两个不同的环境中实现),但我不仅对类似机制感兴趣,而且对您对层次结构问题的看法感兴趣.

tags tagging hierarchical-clustering

20
推荐指数
2
解决办法
3135
查看次数

100万个对象的分层聚类

任何人都可以指向一个可以聚类约100万个对象的层次聚类工具(最好是在python中)吗?我试过hcluster,还有橘子.

hcluster18k物体有问题.Orange能够在几秒钟内聚集18k个对象,但失败了100k对象(饱和内存并最终崩溃).

我在Ubuntu 11.10上运行64位Xeon CPU(2.53GHz)和8GB RAM + 3GB交换.

python cluster-analysis machine-learning hierarchical-clustering data-mining

20
推荐指数
2
解决办法
2万
查看次数

如何在matplotlib中调整树形图的分支长度(如在astrodendro中)?[蟒蛇]

这是我在下面得到的图,但我希望它看起来像截断的树状图,astrodendro如下所示:

在此输入图像描述

还有一个从一个非常酷的树状图看本文,我想在重新创建matplotlib.

在此输入图像描述

下面是生成iris带有噪声变量的数据集并绘制树形图的代码matplotlib.

有谁知道如何:(1)截断分支,如示例图中; 和/或(2)使用astrodendro自定义链接矩阵和标签?

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import astrodendro
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial import distance

def iris_data(noise=None, palette="hls", desat=1):
    # Iris dataset
    X = pd.DataFrame(load_iris().data,
                     index = [*map(lambda x:f"iris_{x}", range(150))],
                     columns = [*map(lambda x: x.split(" (cm)")[0].replace(" ","_"), load_iris().feature_names)])

    y = pd.Series(load_iris().target,
                           index = X.index,
                           name = "Species")
    c = map_colors(y, mode=1, palette=palette, desat=desat)#y.map(lambda …
Run Code Online (Sandbox Code Playgroud)

python plot hierarchical-clustering matplotlib dendrogram

20
推荐指数
1
解决办法
514
查看次数