Julia中的聚类与距离计算
我有一个n个坐标点的集合(x,y,z)。它们存储在一个nx3矩阵M中 Julia中是否有内置函数来计算每个点与其他点之间的距离?我正在处理少量的点,因此计算时间并不太重要 我的总体目标是运行一个聚类算法,所以如果有一个聚类算法,我可以看看,不需要我首先计算这些距离,请建议太多。下面是我想对其执行集群的数据示例。显然,我只需要对z坐标做这个Julia中的聚类与距离计算,julia,hierarchical-clustering,Julia,Hierarchical Clustering,我有一个n个坐标点的集合(x,y,z)。它们存储在一个nx3矩阵M中 Julia中是否有内置函数来计算每个点与其他点之间的距离?我正在处理少量的点,因此计算时间并不太重要 我的总体目标是运行一个聚类算法,所以如果有一个聚类算法,我可以看看,不需要我首先计算这些距离,请建议太多。下面是我想对其执行集群的数据示例。显然,我只需要对z坐标做这个 要计算距离,请使用距离 给定一个矩阵X,可以计算列之间的成对距离。这意味着您应该提供输入点(n个对象)作为矩阵的列。(在您的问题中,您提到了nx3矩阵,因此您
要计算距离,请使用
距离
给定一个矩阵X
,可以计算列之间的成对距离。这意味着您应该提供输入点(n个对象)作为矩阵的列。(在您的问题中,您提到了nx3矩阵,因此您必须使用transpose()
函数对其进行转置。)
下面是一个关于如何使用它的示例:
>using Distances # install with Pkg.add("Distances")
>x = rand(3,2)
3x2 Array{Float64,2}:
0.27436 0.589142
0.234363 0.728687
0.265896 0.455243
>pairwise(Euclidean(), x, x)
2x2 Array{Float64,2}:
0.0 0.615871
0.615871 0.0
如您所见,上面返回了X
列之间的距离矩阵。如果需要,您可以使用其他距离度量,只需检查文档中的包。为了完整地回答@niczky12的问题,Julia中有一个名为的包,正如名称所示,它本质上允许您执行集群
示例kmeans
算法:
>>> using Clustering # Pkg.add("Clustering") if not installed
>>> X = rand(3, 100) # data, each column is a sample
>>> k = 10 # number of clusters
>>> r = kmeans(X, k)
>>> fieldnames(r)
8-element Array{Symbol,1}:
:centers
:assignments
:costs
:counts
:cweights
:totalcost
:iterations
:converged
结果存储在包含上述字段的kmeans(r
)的返回中。两个可能最有趣的字段:r.centers
包含kmeans算法检测到的中心,r.assigments
包含100个样本中每个样本所属的集群
在同一个包中还有其他几种聚类方法。请随意深入阅读文档并应用最适合您需要的文档
在您的情况下,由于您的数据是一个nx3
矩阵,您只需将其转置:
M = rand(100, 3)
kmeans(M', k)
有几种不同的聚类算法。你想运行什么样的集群?我有一个数据集,给出了两条独立悬挂电缆的(x,y,z)坐标。它们仅沿z轴(高度)不同。因此,我想基于z坐标进行聚类。但是,使用直线切割群集的群集不起作用,因为上悬链线的最低点可能低于下悬链线的最高点。我目前正在将悬链线拆分为小块,直线型集群可以工作,但这不是一个很好的解决方案。谢谢。现在,当我在另一个有更多数据的问题上尝试这个方法时,我得到了内存不足错误。知道如何在大量数据上计算距离矩阵吗?