1. 程式人生 > >DBSCAN聚類演算法的實現

DBSCAN聚類演算法的實現

設有N個樣本,樣本為p維,

(1)計算距離矩陣D,時間複雜度為O(N*N*p);

(2)對距離矩陣的每一行進行從小到大排序,得到SD(sorted D),時間複雜度為O(N*N*log(N));

(3)根據Eps與MinPts,標註核心點、邊界點和噪聲點。

首先比較SD(:,MinPts)與Eps的大小,若前者小於後者,則為核心點,反之為非核心點。

對於非核心點,檢驗其Eps鄰域中是否包含核心點,若包含,則為邊界點,否則為噪聲點。

(4)對於核心點和邊界點,建立連線矩陣C(connect),若兩點的距離小於Eps,則對應位置為1,反之為0。

特別地,C的對角線的元素取0。

(5)關鍵步:根據連線矩陣C,確定哪些點為一簇(cluster)。用數學的語言來說,就是找出集合的等價類。

演算法:

從C(1,1)出發,先沿著行往右走,遇到0繼續向右,遇到1時,記錄所在列的指標,然後開始沿著該列往下走,也是遇到0繼續向下,遇到1,記錄所在行的指標,然後換成沿著行往右走,直到行或者列的指標為N。

在上述的搜尋過程中,設定標識變數flag,每次轉換行列,將flag設為0,若移動一次,即遇到1,則flag不變,否則flag=移動一次後所在的列。若一次迭代後,flag=0,說明所有的點都已經分好簇,否則下次從C(flag,flag)處開始搜尋。