具有周期性边界条件的Python DBSCAN聚类

问题描述 投票:0回答:1

我是菜鸟,可能我做的事情对我来说太大了,但是我需要这样做,请原谅我的无知。我的目标是使用sklearn.cluster.DBSCAN在3D点上进行聚类,并仅在x,y上实现周期性边界条件。我发现的最简单的方法是在每个坐标上使用scipy函数pdist,校正周期性边界,然后组合结果以获得可以由DBSCAN消化的距离矩阵(正方形) 。

L=40 #box lenght
for d in range(data.shape[1]):
  # find all 1-d distances
  pd=pdist(data[:,d].reshape(data.shape[0],1))
  # apply boundary conditions (excluding z distances)
  if (d!=2):
    total+=pd**2


# transform the condensed distance matrix...
total=pl.sqrt(total)
# ...into a square distance matrix
square=squareform(total)
db=DBSCAN(eps=4, metric='precomputed').fit(square)

当我运行代码时,我收到此错误:

valueerror: a 2-dimensional array must be passed

是什么问题?还有另一种简单的方法可以实现我的目标吗?

python numpy scikit-learn cluster-analysis dbscan
1个回答
0
投票

Squreform生成一维数组中的凝聚距离矩阵。这是一种内存效率更高的表示形式-但仅当您从一开始就使用它时,以后才可以转换为它。

无论如何,这种形式仅由scipy使用,而不由sklearn使用。但是由于python没有强大的类型系统,因此无法轻松检测到此错误。但是您需要删除正方形调用!

但是我怀疑您对边界条件的处理是您想要的。现在,您似乎完全忽略了第三个轴,并对其余的轴进行常规距离条件。

© www.soinside.com 2019 - 2024. All rights reserved.