Python中的DBSCAN:意外的结果

2024-10-01 09:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解scikitlearn的DBSCAN实现,但是我遇到了麻烦。这是我的数据样本:

X = [[0,0],[0,1],[1,1],[1,2],[2,2],[5,0],[5,1],[5,2],[8,0],[10,0]]

然后我计算D,如所提供的例子所示

^{pr2}$

D返回一个矩阵,其中包含每个点与所有其他点之间的距离。因此对角线总是0。在

然后DBSI可以运行:

 db = DBSCAN(eps=1.1, min_samples=2).fit(D)

eps = 1.1意味着,如果我很好地理解文档,那么距离小于或等于1.1的点将被视为集群(核心)。在

D[1]返回以下内容:

>>> D[1]
array([  1.        ,   0.        ,   1.        ,   1.41421356,
     2.23606798,   5.09901951,   5.        ,   5.09901951,
     8.06225775,  10.04987562])

这意味着第二个点与第一个和第三个点的距离为1。所以我希望他们建立一个集群,但是。。。在

>>> db.core_sample_indices_
[]

也就是说没有找到核心,对吧?这是另外两个输出。在

>>> db.components_
array([], shape=(0, 10), dtype=float64)
>>> db.labels_
array([-1., -1., -1., -1., -1., -1., -1., -1., -1., -1.])

为什么会有集群?在


Tags: 数据距离核心db集群矩阵epsarray
1条回答
网友
1楼 · 发布于 2024-10-01 09:29:27

我认为实现可能只是假设距离矩阵是数据本身。在

请看:通常您不会为DBSCAN计算完整的距离矩阵,而是使用数据索引来更快地搜索邻居。在

从1分钟的谷歌上判断,考虑添加metric="precomputed",因为:

fit(X)

X: Array of distances between samples, or a feature array. The array is treated as a feature array unless the metric is given as ‘precomputed’.

相关问题 更多 >