密度聚類算法 - 數據挖掘算法(8)

(2017-08-29 銀河統計)

密度聚類算法,DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具備噪聲的基於密度的聚類方法)是一種很典型的密度聚類算法,和K-Means只適用於凸樣本集的聚類方法相比,DBSCAN既能夠適用於凸樣本集,也能夠適用於非凸樣本集。下面咱們就對DBSCAN算法的原理作一個總結。程序員

DBSCAN是一種基於密度的聚類算法,這類密度聚類算法通常假定類別能夠經過樣本分佈的緊密程度決定。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本週圍不遠處必定有同類別的樣本存在。經過將緊密相連的樣本劃爲一類,這樣就獲得了一個聚類類別。經過將全部各組緊密相連的樣本劃爲各個不一樣的類別,則咱們就獲得了最終的全部聚類類別結果。DBSCAN算法在大規模數據庫上更好的效率。DBSCAN可以將足夠高密度的區域劃分紅簇,並能在具備噪聲的空間數據庫中發現任意形狀的簇。算法

1、DBSCAN算法基本術語

DBSCAN是基於一組鄰域來描述樣本集的緊密程度的,參數(ϵ, MinPts)用來描述鄰域的樣本分佈緊密程度。其中,ϵ描述了某同樣本的鄰域距離閾值,MinPts描述了某同樣本的距離爲ϵ的鄰域中樣本個數的閾值。數據庫

一、 ϵ-鄰域:對於$x_j∈D$,其ϵ-鄰域包含樣本集$D$中與$x_j$的距離不大於ϵ的子樣本集,即$Nϵ(x_j)={x_i∈D|distance(x_i,x_j)≤ϵ}$, 這個子樣本集的個數記爲$|Nϵ(x_j)|$。
二、 核心對象:對於任同樣本$x_j∈D$,若是其ϵ-鄰域對應的$Nϵ(_xj)$至少包含$MinPts$個樣本,即若是$|Nϵ(x_j)|≥MinPts$,則$x_j$是核心對象。
三、 密度直達:若是$x_i$位於$x_j$的ϵ-鄰域中,且$x_j$是核心對象,則稱$x_i$由$x_j$密度直達。注意反之不必定成立,即此時不能說$x_j$由$x_i$密度直達, 除非且$x_i$也是核心對象。
四、 密度可達:對於$x_i$和$x_j$,若是存在樣本樣本序列$p_1,p_2,...,p_T$,知足$p_1=x_i,p_T=x_j$, 且$p_t+1$由$p_t$密度直達,則稱$x_j$由$x_i$密度可達。也就是說,密度可達知足傳遞性。此時序列中的傳遞樣本$p_1,p_2,...,p_{T−1}$均爲核心對象,由於只有核心對象才能使其餘樣本密度直達。注意密度可達也不知足對稱性,這個能夠由密度直達的不對稱性得出。
五、 密度相連:對於$x_i$和$x_j$,若是存在覈心對象樣本$x_k$,使$x_i$和$x_j$均由$x_k$密度可達,則稱$x_i$和$x_j$密度相連。注意密度相連關係是知足對稱性的。

從下圖能夠很容易看出理解上述定義,圖中MinPts=5,紅色的點都是核心對象,由於其ϵ-鄰域至少有5個樣本。黑色的樣本是非核心對象。全部核心對象密度直達的樣本在以紅色核心對象爲中心的超球體內,若是不在超球體內,則不能密度直達。圖中用綠色箭頭連起來的核心對象組成了密度可達的樣本序列。在這些密度可達的樣本序列的ϵ-鄰域內全部的樣本相互都是密度相連的。編程

2、DBSCAN算法定義、思路和流程

一、算法定義api

DBSCAN是基於一組鄰域來描述樣本集的緊密程度的,參數(ϵ, MinPts)用來描述鄰域的樣本分佈緊密程度。其中,ϵ描述了某同樣本的鄰域距離閾值,MinPts描述了某同樣本的距離爲ϵ的鄰域中樣本個數的閾值。數組

假設個人樣本集是\(D=(p_1,p_2,...,p_m)\),則DBSCAN具體的密度描述定義以下:瀏覽器

I. 對於空間中的一個對象,若是它在給定半徑ϵ-鄰域中的對象個數大於密度閥值MinPts,則該對象被稱爲核心對象,不然稱爲邊界對象。
II. 若是p是一個核心對象,q屬於p的鄰域,那麼稱p直接密度可達q。
III. 若是存在一條鏈…..,$p_i$>,知足$p_{_1}=p,p_i=q,p_i$直接密度可達$p_i+1$,則稱p密度可達q。
IV. 若是存在o,o密度可達q和p,則稱p和q是密度連通的。
V. 由一個核心對象和其密度可達的全部對象構成一個聚類。

二、算法思路架構

從數據集D中的任意一個點P開始,查找D 中全部關於ϵ-鄰域(最小半徑)和MinPts(密度閾值)的從P密度可達的點。若P是核心點,則其鄰域內的全部點和P同屬於一個簇,這些點將做爲下一輪的考察對象(即種子點),並經過不斷查找從種子點密度可達的點來擴展它們所在的簇,直至找到一個完整的簇;若P不是核心點,即沒有對象從P密度可達,則P被暫時地標註爲噪聲。而後,算法對D 中的下一個對象重複上述過程⋯⋯ 。當全部種子點都被考察過,一個簇就擴展完成了。此時,若D中還有未處理的點,算法則進行另外一個簇的擴展;不然,D 中不屬於任何簇的點即爲噪聲。app

三、算法流程
函數

I. 數據輸入:D - 數據集合,ϵ - 半徑,MinPts - 給定點在ϵ-鄰域半徑內稱爲核心對象的最小領域點數;

II. 判斷輸入點是否爲核心對象、找出核心對象ϵ-鄰域中全部密度直接可達點;

III. 針對全部核心對象ϵ-鄰域中的全部密度直接達點找到最大密度相連對象集合(簇),按密度直接達和密度可達順序合併一些可達對象。

3、DBSCAN算法案例

數據樣本以下表(數據表I):

序號 屬性1 屬性2
1 2 1
2 5 1
3 1 2
4 2 2
5 3 2
6 4 2
7 5 2
8 6 2
9 1 3
10 2 3
11 5 3
12 2 4

樣本散點圖以下:

令ϵ = 1,MinPts = 4,試用密度聚類算法對樣本進行分類。

樣本間歐幾里得距離矩陣表以下(數據表II):

i/j 1 2 3 4 5 6 7 8 9 10 11 12
1 0 3 1.41 1 1.41 2.24 3.16 4.12 2.24 2 3.61 3
2 3 0 4.12 3.16 2.24 1.41 1 1.41 4.47 3.61 2 4.24
3 1.41 4.12 0 1 2 3 4 5 1 1.41 4.12 2.24
4 1 3.16 1 0 1 2 3 4 1.41 1 3.16 2
5 1.41 2.24 2 1 0 1 2 3 2.24 1.41 2.24 2.24
6 2.24 1.41 3 2 1 0 1 2 3.16 2.24 1.41 2.83
7 3.16 1 4 3 2 1 0 1 4.12 3.16 1 3.61
8 4.12 1.41 5 4 3 2 1 0 5.1 4.12 1.41 4.47
9 2.24 4.47 1 1.41 2.24 3.16 4.12 5.1 0 1 4 1.41
10 2 3.61 1.41 1 1.41 2.24 3.16 4.12 1 0 3 1
11 3.61 2 4.12 3.16 2.24 1.41 1 1.41 4 3 0 3.16
12 3 4.24 2.24 2 2.24 2.83 3.61 4.47 1.41 1 3.16 0
MinPts 1 1 2 4 2 2 4 1 2 3 1 1

密度聚類分析:


I、 核心對象爲樣本4和樣本7;

II、 樣本4密度直達樣本爲樣本一、三、四、五、10;

III、樣本7密度直達樣本爲樣本二、六、七、八、11;

IV、樣本4的密度直達樣本3和樣本9密度直達、樣本6和樣本5密度直達、樣本10和樣本12密度直達,全部樣本4和樣本九、六、12密度可達。這樣,樣本一、三、四、五、九、十、12聚類爲一簇(有樣本4自己、4個直接可達、2個間接可達樣本構成)。樣本6和另外一個核心對象樣本7密度直達,應歸爲另外一個簇;

V、樣本7的密度直達樣本6和樣本5密度直達,樣本7和樣本5密度可達。但因爲樣本5和核心對象樣本4密度直達,因此樣本5屬於以樣本4爲核心對象的簇。

綜合上述分析,樣本聚類爲兩個簇{一、三、四、五、九、十、12}和{二、六、七、八、11}。

4、DBSCAN算法API接口

應用程序接口(API:application programming interface)是一組定義、程序及協議的集合,經過 API 接口實現計算機軟件之間的相互通訊。API 的一個主要功能是提供通用功能集。程序員經過使用 API 函數開發應用程序,從而能夠避免編寫無用程序,以減輕編程任務。

基於互聯網的應用正變得愈來愈普及,在這個過程當中,有更多的站點將自身的資源開放給開發者來調用。對外提供的API 調用使得站點之間的內容關聯性更強。開放是目前的發展趨勢,愈來愈多的產品走向開放。目前的網站不能靠限制用戶離開來留住用戶,開放的架構反而更增長了用戶的粘性。在Web 2.0的浪潮到來以前,開放的API 甚至源代碼主要體如今桌面應用上,而如今愈來愈多的Web應用面向開發者開放了API。

經過開放的API 來讓站點提供的服務擁有更大的用戶羣和服務訪問數量。站點在推出基於開放API 標準的產品和服務後,無需花費力氣作大量的市場推廣,只要提供的服務或應用出色易用,其餘站點就會主動將開放API 提供的服務整合到本身的應用之中。同時,這種整合API 帶來的服務應用,也會激發更多富有創意的應用產生。開放API 的站點爲第三方的開發者提供良好的社區支持也是頗有意義的,這有助於吸引更多的技術人員參與到開放的開發平臺中,並開發出更爲有趣的第三方應用。

銀河統計工做室陸續推出數據挖掘、統計隨機數及臨界值、房地產數據等API接口服務,下面詳細介紹DBSCAN算法API接口用法。

一、DBSCAN算法API接口樣例及參數解釋

I、接口樣例

URL:http://api.galaxystatistics.com:8882/?token=098f6bcd4621d373cade4e832627b4f6&type=13&var_name=dbscanMethod&data_str=2,1|5,1|1,2|2,2|3,2|4,2|5,2|6,2|1,3|2,3|5,3|2,4&oEps=1&oMinPts=4

注:在瀏覽器中運行接口樣例字符,可返回上傳樣本密度聚類結果

II、接口參數說明

API接口域名網址:

http://api.galaxystatistics.com

端口號:

8882        # 不一樣的接口,會使用不一樣的端口號

公共測試用Key:

token=098f6bcd4621d373cade4e832627b4f6

數據類型:

type=13     # 不一樣聚類方法的api接口,採用不一樣的type值【如:十一、十二、13】

輸出變量名:

var_name=hclustMethod       # 根據程序需求,自定義變量名稱【如:hclustMethod、kmeansMethod、dbscanMethod】

模型方法參數:

data_str                    # 數據字符串
oEps # 鄰域半徑[eps]
oMinPts # 判斷核心點閾值[MinPts]

二、DBSCAN算法API回傳數據樣例及參數解釋

I、回傳數據樣例(JSON)

var dbscanMethod={"No":[1,3,4,5,9,10,12,2,6,7,8,11],"SType":[1,1,1,1,1,1,1,2,2,2,2,2],"X1":[2,1,2,3,1,2,2,5,4,5,6,5],"X2":[1,2,2,2,3,3,4,1,2,2,2,3]}

II、回傳數據參數說明

回傳數據變量名稱:

dbscanMethod  #由接口參數var_name指定

樣本序號:

No        # 按聚類類別排序

聚類類別:

SType  #爲數組對象

數據列1:

X1     # 樣本變量1數組

數據列2:

X2     # 樣本變量2數組

5、DBSCAN算法API接口運用

格式化樣本數據(參見數據表I)字符(屬性變量分隔符爲「,」、行分隔符爲「|」)
核半徑  &nbsp核心點閾值   

注:按格式輸入樣本數據,設置適當核半徑和核心點閾值,點擊「密度聚類列表」,自動按DBSCAN算法API接口格式遞交數據,並解析回傳數據、用列表展現聚類分析結果

核半徑和核心點閾值的設置對DBSCAN算法聚類結果影響很是大。若是核心點閾值設置的偏大、或核半徑偏小,則沒有核心對象,全部樣本將被判別爲孤立點(分類爲0);核心點閾值設置的偏小、或核半徑偏大,則核心對象多,樣本容易被併爲同類、甚至全部樣本被聚爲一類。

在DBSCAN算法API接口運用模板中,能夠試着將核心點閾值改成三、五、6觀察密度聚類效果。也能夠將核半徑改成0.五、2觀察聚類效果。

關於R聚類內容參見銀河統計之聚類分析 - 用R構建Shiny應用程序

相關文章
相關標籤/搜索