在DBSCAN中,如果我们有minPoints = 3并且我们想确定一个点是否是一个核心点,你是否在Eps中计算点本身还是需要在其Eps中有3个其他点?
答案 0 :(得分:1)
DBSCAN是一种具有数据库上下文的算法。
为了获得良好的性能,您需要一个可以使用索引加速此类查询的数据库 - 这会将运行时从O(n^2)
减少到O(n log n)
。
如果您将范围查询发送到数据库,它将返回所有此区域内的对象,包括查询点。您必须从结果中手动删除查询点。
但从逻辑的角度来看:这是一个密度度量。为什么密度估计必须排除查询对象?它是数据集的一部分,它应该像任何其他对象一样对密度做出贡献!
我没有看到为什么应该从每个查询的数据集中删除查询点的任何原因。
答案 1 :(得分:0)
根据维基百科中提供的算法,点P
的区域查询会返回P's
eps
邻域内的所有点,包括P
。
这是算法(来自Wikipedia)
DBSCAN(D, eps, MinPts)
C = 0
for each unvisited point P in dataset D
mark P as visited
NeighborPts = regionQuery(P, eps)
if sizeof(NeighborPts) < MinPts
mark P as NOISE
else
C = next cluster
expandCluster(P, NeighborPts, C, eps, MinPts)
expandCluster(P, NeighborPts, C, eps, MinPts)
add P to cluster C
for each point P' in NeighborPts
if P' is not visited
mark P' as visited
NeighborPts' = regionQuery(P', eps)
if sizeof(NeighborPts') >= MinPts
NeighborPts = NeighborPts joined with NeighborPts'
if P' is not yet member of any cluster
add P' to cluster C
regionQuery(P, eps)
return all points within P's eps-neighborhood (including P)
由于核心点被定义为具有MinPts
与Eps
的点数更多的点,我会说在确定它是否是核心点时会对点本身进行计数。 / p>