在给定 x,y,z 坐标时使用 DBSCAN 算法对 3D 点进行聚类

Posted

技术标签:

【中文标题】在给定 x,y,z 坐标时使用 DBSCAN 算法对 3D 点进行聚类【英文标题】:Clustering the 3D points when given the x,y,z coordinates using DBSCAN algorithm using python 【发布时间】:2019-09-27 11:34:00 【问题描述】:

我正在尝试使用带有 python 的DBSCAN 算法在一些给定坐标的帮助下对一些 3D 点进行聚类。

ex:- 给定坐标如下

  X      Y      Z

 [-37.530  3.109  -16.452]
 [40.247  5.483  -15.209]
 [-31.920 12.584  -12.916] 
 [-32.760 14.072  -13.749]
 [-37.100  1.953  -15.720] 
 [-32.143 12.990  -13.488]
 [-41.077  4.651  -15.651] 
 [-34.219 13.611  -13.090]
 [-33.117 15.875  -13.738]  e.t.c

我对编程和搜索如何编写代码的示例脚本有点陌生。有人可以提供建议或示例吗? 提前非常感谢。

【问题讨论】:

Python: DBSCAN in 3 dimensional space的可能重复 是的,这行得通。非常感谢。 【参考方案1】:

您可以使用sklearn.cluster.DBSCAN。在你的情况下:

import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
from sklearn.cluster import DBSCAN

data = np.array([[-37.530, 3.109, -16.452],
                [40.247, 5.483, -15.209],
                [-31.920, 12.584, -12.916],
                [-32.760, 14.072, -13.749],
                [-37.100, 1.953, -15.720],
                [-32.143, 12.990, -13.488],
                [-41.077, 4.651, -15.651], 
                [-34.219, 13.611, -13.090],
                [-33.117, 15.875, -13.738]])

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(data[:,0], data[:,1], data[:,2], s=300)
ax.view_init(azim=200)
plt.show()

model = DBSCAN(eps=2.5, min_samples=2)
model.fit_predict(data)
pred = model.fit_predict(data)

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(data[:,0], data[:,1], data[:,2], c=model.labels_, s=300)
ax.view_init(azim=200)
plt.show()

print("number of cluster found: ".format(len(set(model.labels_))))
print('cluster for each point: ', model.labels_)

输出

聚类前

聚类后

number of cluster found: 3
cluster for each point:  [ 0 -1  1  1  0  1 -1  1  1]

【讨论】:

另外,您可以考虑使用在较大数据集上表现更好的 OPTICS 算法:scikit-learn.org/stable/modules/generated/…

以上是关于在给定 x,y,z 坐标时使用 DBSCAN 算法对 3D 点进行聚类的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯直线(省赛C/C++填空)

关于RSA算法

使用来自两个自旋向量的点在球体上插值 x、y、z 坐标?

如何使用 Autodesk Forge 查看器在 3D 模型中查找位置(x、y、z 坐标)

如何找到将 X、Y、Z 向量与另一个坐标系对齐的角度

使用加速度计读取 android 手机的 x y z 坐标