标签: hierarchical-clustering

Spark 中的层次聚合聚类

我正在研究一个集群问题,它必须可扩展以适应大量数据。我想尝试 Spark 中的层次聚类,并将我的结果与其他方法进行比较。

我在网上做了一些关于 Spark 中使用层次聚类的研究,但没有找到任何有希望的信息。

如果有人对此有一些见解,我将非常感激。谢谢。

cluster-analysis hierarchical-clustering apache-spark

3
推荐指数
1
解决办法
9064
查看次数

Scipy 的 cut_tree() 不返回请求的簇数,并且使用 scipy 和 fastcluster 获得的链接矩阵不匹配

我正在使用fastcluster包与scipy.cluster.hierarchy模块函数进行凝聚层次聚类 ( AHC ) 实验,在 中,我发现cut_tree()函数的令人费解的行为。Python 3

我毫无问题地对数据进行聚类,并Z使用linkage_vector()with获得链接矩阵method=ward。然后,我想切割树状图树以获得固定数量的簇(例如 33),并且我使用 正确地执行此操作cut_tree(Z, n_clusters=33)。(请记住,AHC 是一种确定性方法,生成连接所有数据点的二叉树,这些数据点位于树的叶子;您可以在任何级别查看这棵树,以“查看”您最终想要的集群数量;所有cut_tree() 的作用是返回一组从 0 到 n_clusters - 1 的“n_cluster”整数标签,归因于数据集的每个点。)

我在其他实验中已经做过很多次,并且总是得到我请求的集群数量。问题是,对于这个数据集,当我要求cut_tree()33 个簇时,它只给我 32 个。我不明白为什么会出现这种情况。这可能是一个错误吗?您知道 的任何错误吗cut_tree()?我尝试调试这种行为,并使用 scipy 的links()函数执行相同的聚类实验。将生成的链接矩阵作为输入,cut_tree()我没有得到意外数量的簇作为输出。我还验证了两种方法输出的链接矩阵不相等。

我使用的 [数据集]由 10680 个向量组成,每个向量有 20 个维度。检查以下实验:

import numpy as np
import fastcluster as fc
import scipy.cluster.hierarchy as hac
from scipy.spatial.distance import pdist

### *Load dataset (10680 vectors, each with 20 …
Run Code Online (Sandbox Code Playgroud)

python debugging hierarchical-clustering data-analysis scipy

3
推荐指数
1
解决办法
1215
查看次数

sklearn的凝聚聚类中提取从根到叶的路径

给定由 创建的凝聚聚类的某些特定叶节点sklearn.AgglomerativeClustering,我试图确定从根节点(所有数据点)到给定叶节点的路径,以及每个中间步骤(树的内部节点)相应数据的列表点,请参见下面的示例。

在此输入图像描述

在此示例中,我考虑了五个数据点并重点关注点 3,这样我希望提取从根开始到叶 3 结束的每个步骤中考虑的实例,因此所需的结果将是 [[1 ,2,3,4,5],[1,3,4,5],[3,4],[3]]。我如何使用 sklearn 实现这一点(或者如果使用不同的库不可能实现这一点)?

python hierarchical-clustering scikit-learn

3
推荐指数
1
解决办法
863
查看次数

如何在R中可视化覆盖圆形图的集群?

我有一个使用名为 Revigo 的网站制作的图,该网站提供了一个 R 脚本(包括在下面)来创建这样的图:

在此处输入图片说明

我想看看是否可以在同一图中的这些点之上执行和可视化聚类?由于该图看起来像一个大圆圈,因此我试图查看其中是否有可以突出显示的较小分组。我有生物学背景,所以我不知道从哪里开始尝试在同一个图中获得这种可视化。我已经探索过使用,hclust()但我不知道将集群显示在此图表顶部的步骤。

给出上图的代码和数据是:

library( ggplot2 );
library( scales );

revigo.names <- c("term_ID","description","frequency_%","plot_X","plot_Y","plot_size","log10_p_value","uniqueness","dispensability");
revigo.data <- rbind(c("GO:0002376","immune system process",16.463,-0.302,-3.807, 3.455,-8.3307,0.995,0.000),
c("GO:0006928","movement of cell or subcellular component",10.987, 1.052, 1.113, 3.280,-8.8153,0.965,0.000),
c("GO:0007610","behavior", 3.254,-1.620, 0.960, 2.752,-4.0048,0.994,0.000),
c("GO:0008150","biological_process",100.000,-6.029,-0.499, 4.239,-8.7447,1.000,0.000),
c("GO:0009987","cellular process",90.329,-5.288, 0.130, 4.195,-10.0701,0.999,0.000),
c("GO:0010243","response to organonitrogen compound", 4.697, 6.870,-2.756, 2.911,-12.7100,0.865,0.000),
c("GO:0023052","signaling",36.613, 2.976,-6.718, 3.803,-7.1931,0.996,0.000),
c("GO:0032501","multicellular organismal process",41.143, 3.761,-0.715, 3.853,-17.2741,0.997,0.000),
c("GO:0032502","developmental process",33.982,-2.865,-0.660, 3.770,-14.4202,0.996,0.000),
c("GO:0034762","regulation of transmembrane transport", 2.452,-3.982, 3.261, 2.629,-13.4123,0.788,0.000),
c("GO:0040007","growth", 5.447, 0.651,-0.889, 2.975,-4.2140,0.995,0.000),
c("GO:0040011","locomotion", 9.452, 2.305,-0.865, 3.215,-8.1068,0.995,0.000),
c("GO:0050896","response to stimulus",49.302, 3.556,-5.122, …
Run Code Online (Sandbox Code Playgroud)

visualization r hierarchical-clustering ggplot2

3
推荐指数
1
解决办法
208
查看次数

层次聚类分析帮助 - 树状图

我编写了一个代码来使用该函数生成树状图,如图所示hclust。所以,我需要帮助解释这个树状图。请注意,这些点的位置很接近。我得到的这个树状图结果意味着什么,你能帮我吗?我真的很想对生成的输出进行更完整的分析

library(geosphere)

Points_properties<-structure(list(Propertie=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29), Latitude = c(-24.781624, -24.775017, -24.769196, 
                                               -24.761741, -24.752019, -24.748008, -24.737312, -24.744718, -24.751996, 
                                               -24.724589, -24.8004, -24.796899, -24.795041, -24.780501, -24.763376, 
                                               -24.801715, -24.728005, -24.737845, -24.743485, -24.742601, -24.766422, 
                                               -24.767525, -24.775631, -24.792703, -24.790994, -24.787275, -24.795902, 
                                               -24.785587, -24.787558), Longitude = c(-49.937369, 
                                                                                                  -49.950576, -49.927608, -49.92762, -49.920608, -49.927707, -49.922095, 
                                                                                                  -49.915438, -49.910843, -49.899478, -49.901775, -49.89364, -49.925657, 
                                                                                                  -49.893193, -49.94081, -49.911967, -49.893358, -49.903904, -49.906435, 
                                                                                                  -49.927951, -49.939603, -49.941541, -49.94455, -49.929797, -49.92141, 
                                                                                                  -49.915141, -49.91042, -49.904772, -49.894034)), row.names = c(NA, -29L), class = c("tbl_df", "tbl", 
                                                                                                                                                                                                                        "data.frame"))

coordinates<-subset(Points_properties,select=c("Latitude","Longitude"))
plot(coordinates[,2:1]) …
Run Code Online (Sandbox Code Playgroud)

r cluster-analysis hierarchical-clustering

3
推荐指数
1
解决办法
247
查看次数

怀疑有关推文的聚类方法

我对聚类和相关主题相当新,所以请原谅我的问题.

我试图通过做一些测试来介绍这个领域,作为第一个实验,我想根据内容相似性在推文上创建集群.实验的基本思想是将推文存储在数据库上并定期计算聚类(即使用cron作业).请注意,数据库会不时获得新的推文.

在这个领域无知,我的想法(可能是天真的)将是这样的事情:

1. For each new tweet in the db, extract N-grams (N=3 for example) into a set
2. Perform Jaccard similarity and compare with each of the existing clusters. If result > threshold then it would be assigned to that cluster
3. Once finished I'd get M clusters containing similar tweets
Run Code Online (Sandbox Code Playgroud)

现在我看到这个基本方法存在一些问题.让我们抛开计算成本,如何在推文和集群之间进行比较?假设我有一条推文Tn和一个包含T1,T4,T10的集群C1,我应该将它与之比较?鉴于我们正在讨论相似性,很可能会发生sim(Tn,T1)>阈值但sim(Tn,T4)<阈值.我的直觉告诉我,为了避免这个问题,应该为集群使用类似平均值的东西.

此外,可能发生sim(Tn,C1)和sim(Tn,C2)都是>阈值但与C1的相似性会更高.在那种情况下,Tn应该转到C1.这也可以做蛮力,以便将推文分配给具有最大相似性的群集.

最后,这是计算问题.我一直在阅读有关minhash的一些内容,它似乎是这个问题的答案,尽管我需要对它进行更多的研究.

无论如何,我的主要问题是:在该地区有经验的人是否可以向我推荐我应该采用哪种方法?我读过一些关于LSA和其他方法的提及,但是试图应对一切都变得有点压倒性,所以我很欣赏一些指导.

从我正在阅读的工具来看,这将是层次聚类,因为它允许在新数据进入时重新组合聚类.它是否正确?

请注意,我不是在寻找任何复杂的案例.我的用例理念是能够在没有任何先前信息的情况下将类似的推文聚类成组.例如,来自Foursquare的推文("我正在检查......"彼此相似的推文将是一个案例,或者"我的klout得分是......").另请注意,我希望这与语言无关,所以我对处理特定语言问题不感兴趣.

cluster-analysis hierarchical-clustering data-mining

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

关于scipy.cluster.hierarchy.fcluster的返回值和用法

假设我们有四个观察值,scipy.cluster.hierarchy.linkage的返回值是:

[[ 1.          3.          0.08        2.        ]
 [ 2.          4.          0.28813559  3.        ]
 [ 0.          5.          1.          4.        ]]
Run Code Online (Sandbox Code Playgroud)

该返回值意味着:首先将观察1和3合并到新的簇4,然后将观察2添加到该新簇中以形成新的簇5.最后,观察0被聚类.由于我想获得两个集群{1,3,2}和{0},我期望返回值为[2,1,1,1],这意味着元素0属于集群2,其余集合为另一个集群.簇1,使用阈值0.4.但实际上scipy.cluster.hierarchy.fcluster返回[3 1,2,1].当然我可以编写python代码来自己分析链接返回的二维数组,但我认为如果我将阈值设置为0.4,fcluster函数可以返回我想要的.但是,我不知道如何为它提供参数,所以我想知道你是否可以提供一些示例代码来进行层次聚类,linkage并使用fcluster分组在由集合表示的聚类中的观察结果给出最终结果.谢谢.

hierarchical-clustering scipy

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

Cluster analysis in R: How can I get deterministic results from pvclust?

pvclust is great for cluster analysis in R. However, when running it as part of a batch operation, it is annoying to get different results for the same data. Obviously, there are many "correct" clusterings of the same data, and it seems that pvclust uses some randomness to determine the clusters of a specific run. But is there any way to get deterministic results?

I want to be able to present a minimal, repeatable analysis package: the data plus an …

random r cluster-analysis hierarchical-clustering pvclust

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

如何将距离矩阵插入 R 并运行层次聚类

我知道如果我有原始数据,我可以创建一个距离矩阵,但是对于这个问题,我有一个距离矩阵,我希望能够在 R 中运行命令,比如 hclust。下面是我在 R 中想要的距离矩阵。我不确定以矩阵形式存储这些数据是否有效,因为我将无法在矩阵上运行 hclust。

在此处输入图片说明

我尝试使用as.dist函数创建它但无济于事。我的错误代码:

test=as.dist(c(.76,2.97,4.88,3.86,.8,4.17,1.96,.21,1.51,.51), diag = FALSE, upper = FALSE)
test
      1    2    3    4    5    6    7    8    9
2  2.97                                        
3  4.88 2.97                                   
4  3.86 4.88 0.51                              
5  0.80 3.86 2.97 0.21                         
6  4.17 0.80 4.88 1.51 0.80                    
7  1.96 4.17 3.86 0.51 4.17 0.51               
8  0.21 1.96 0.80 2.97 1.96 2.97 0.80          
9  1.51 0.21 4.17 4.88 0.21 4.88 4.17 0.21     
10 0.51 1.51 1.96 3.86 1.51 3.86 1.96 1.51 …
Run Code Online (Sandbox Code Playgroud)

r distance hierarchical-clustering matrix

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

揭示 igraph 中的交互集群

我有一个交互网络,我使用以下代码制作邻接矩阵,然后计算网络节点之间的相异度,然后将它们聚类以形成模块:

ADJ1=abs(adjacent-mat)^6
dissADJ1<-1-ADJ1
hierADJ<-hclust(as.dist(dissADJ1), method = "average")
Run Code Online (Sandbox Code Playgroud)

现在我希望在绘制 igraph 时出现这些模块。

g<-simplify(graph_from_adjacency_matrix(adjacent-mat, weighted=T))
plot.igraph(g)
Run Code Online (Sandbox Code Playgroud)

但是,到目前为止,我发现将 hclust 输出转换为图形的唯一方法是按照以下教程:http ://gastonsanchez.com/resources/2014/07/05/Pretty-tree-graph/

phylo_tree = as.phylo(hierADJ)
graph_edges = phylo_tree$edge
graph_net = graph.edgelist(graph_edges)
plot(graph_net)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这对分层沿袭很有用,但我只想要与集群密切交互的节点,如下所示:

在此处输入图片说明

任何人都可以推荐如何使用命令(例如 igraph 中的组件)来显示这些集群?

r cluster-analysis hierarchical-clustering igraph

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