用于确定 DBSCAN eps 的 Knn 距离图

数据挖掘 Python 聚类 参数估计 数据库扫描
2021-09-22 05:40:04

我想使用 knn 距离图来确定我应该为 DBSCAN 算法选择哪个 eps 值。基于页面:

这个想法是计算每个点到它的 k 个最近邻居的距离的平均值。k 的值将由用户指定并对应于 MinPts。接下来,这些 k 距离按升序绘制。目的是确定与最佳 eps 参数相对应的“拐点”。

将python与numpy/sklearn一起使用,我有以下几点,6-knn的距离如下:

X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
nbrs = NearestNeighbors(n_neighbors=len(X)).fit(X)
distances, indices = nbrs.kneighbors(X)

# Indices

[[0 1 2 3 4 5]
 [1 0 2 3 4 5]
 [2 1 0 3 4 5]
 [3 4 5 0 1 2]
 [4 3 5 0 1 2]
 [5 4 3 0 1 2]]

# Distances
[[ 0.          1.          2.23606798  2.82842712  3.60555128  5.        ]
[ 0.          1.          1.41421356  3.60555128  4.47213595  5.83095189]
[ 0.          1.41421356  2.23606798  5.          5.83095189  7.21110255]
[ 0.          1.          2.23606798  2.82842712  3.60555128  5.        ]
[ 0.          1.          1.41421356  3.60555128  4.47213595  5.83095189]
[ 0.          1.41421356  2.23606798  5.          5.83095189  7.21110255]]

然后我计算了平均距离:

distances.mean()
2.9269575028354495

问题是我不明白我如何准确地表示与它们相同的图,其中 y 轴上的距离和点数根据 x 轴上的距离使用 python。

谢谢您帮忙。

1个回答

  1. 取该矩阵的最后一列
  2. 降序排序
  3. 地块索引,距离
  4. 希望看到膝盖(如果距离不好。可能没有)