1

在DBSCAN中,如果我們有minPoints = 3,並且我們想要確定一個點是否是核心點,那麼您是否在Eps中計算該點本身,還是需要其他3個點點在它的Eps?Eps中的哪些點數DBSCAN

回答

0

根據維基百科中提供的算法,點P的區域查詢返回P'seps鄰域內的所有點,包括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) 

由於核心點被定義爲一個具有更多的積分是MinPtsEps,我會說點本身算作同時確定它是否是一個核心點或不。

+0

看起來合法,謝謝先生! – user3628045

1

DBSCAN是一種具有數據庫上下文的算法。

爲了獲得良好的性能,您需要一個可以使用索引加速查詢的數據庫 - 這將運行時從O(n^2)減少到O(n log n)

如果發送範圍查詢到數據庫,它將返回所有的這個區域內的物體,包括查詢點。您將不得不從結果中手動刪除查詢點。

但是從邏輯的角度來看:這是一個密度測量。爲什麼密度估計必須排除查詢對象?它是數據集的一部分,它應該像任何其他對象一樣貢獻密度!

我看不到任何理由爲什麼應該從每個查詢的數據集中刪除查詢點。

+0

我想你錯過了我的問題,或者把它和其他一些問題混淆了。 :) – user3628045

+0

不,我沒有。 「點本身」在數據庫上下文中通常被稱爲「查詢點」。因爲你查詢數據庫的這一點的鄰居。 –

+0

你絕對是對的,我看你的帖子有點快。很抱歉,感謝您的重播! – user3628045