DBSCAN共包括3個輸入數據:數據集D,給定點在鄰域內成爲核心對象的最小鄰域點數:MinPts,鄰域半徑:Eps,其中Eps和MinPts需要根據具體應用人爲設定。
(1) Eps的值可以使用繪製k-距離曲線(k-distance graph)方法得當,在k-距離曲線圖明顯拐點位置爲對應較好的參數。若參數設置過小,大部分數據不能聚類;若參數設置過大,多個簇和大部分對象會歸併到同一個簇中。
K-距離:K距離的定義在DBSCAN算法原文中給出了詳細解說,給定K鄰域參數k,對於數據中的每個點,計算對應的第k個最近鄰域距離,並將數據集所有點對應的最近鄰域距離按照降序方式排序,稱這幅圖爲排序的k距離圖,選擇該圖中第一個谷值點位置對應的k距離值設定爲Eps。一般將k值設爲4。
MinPts的選取有一個指導性的原則(a rule of thumb),MinPts≥dim+1,其中dim表示待聚類數據的維度。MinPts設置爲1是不合理的,因爲設置爲1,則每個獨立點都是一個簇,MinPts≤2時,與層次距離最近鄰域結果相同,因此,MinPts必須選擇大於等於3的值。若該值選取過小,則稀疏簇中結果由於密度小於MinPts,從而被認爲是邊界點兒不被用於在類的進一步擴展;若該值過大,則密度較大的兩個鄰近簇可能被合併爲同一簇。因此,該值是否設置適當會對聚類結果造成較大影響。
DBSCAN原理僞代碼:
(1) 首先將數據集D中的所有對象標記爲未處理狀態
(2) for(數據集D中每個對象p) do
(3) if (p已經歸入某個簇或標記爲噪聲) then
(4) continue;
(5) else
(6) 檢查對象p的Eps鄰域 NEps(p) ;
(7) if (NEps(p)包含的對象數小於MinPts) then
(8) 標記對象p爲邊界點或噪聲點;
(9) else
(10) 標記對象p爲核心點,並建立新簇C, 並將p鄰域內所有點加入C
(11) for (NEps(p)中所有尚未被處理的對象q) do
(12) 檢查其Eps鄰域NEps(q),若NEps(q)包含至少MinPts個對象,則將NEps(q)中未歸入任何一個簇的對象加入C;
(13) end for
(14) end if
(15) end if
(16) end for
轉自https://blog.csdn.net/zhouxianen1987/article/details/68945844