&&機器學習實戰&&DBSCAN

1.概述

 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪聲的基於密度的聚類方法)是一種很典型的密度聚類算法,和K-Means,BIRCH這些一般只適用於凸樣本集的聚類相比,DBSCAN既可以適用於凸樣本集,也可以適用於非凸樣本集。DBSCAN算法的顯著優點是聚類速度快且能夠有效處理噪聲點和發現任意形狀的空間聚類

該算法利用基於密度的聚類的概念,即要求聚類空間中的一定區域內所包含對象(點或其他空間對象)的數目不小於某一給定閾值。過濾低密度區域,發現稠密度樣本點。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本週圍不遠處一定有同類別的樣本存在。

2.密度聚類原理

DBSCAN是一種基於密度的聚類算法,這類密度聚類算法一般假定類別可以通過樣本分佈的緊密程度決定。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本週圍不遠處一定有同類別的樣本存在。

通過將緊密相連的樣本劃爲一類,這樣就得到了一個聚類類別。通過將所有各組緊密相連的樣本劃爲各個不同的類別,則我們就得到了最終的所有聚類類別結果。

3.基本概念

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

 

 

4.密度可達和密度相連的直觀解釋

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

        由密度可達關係導出的最大密度相連的樣本集合,即爲我們最終聚類的一個類別,或者說一個簇。這個DBSCAN的簇裏面可以有一個或者多個核心對象。如果只有一個核心對象,則簇裏其他的非核心對象樣本都在這個核心對象的ϵ-鄰域裏;如果有多個核心對象,則簇裏的任意一個核心對象的ϵ-鄰域中一定有一個其他的核心對象,否則這兩個核心對象無法密度可達。這些核心對象的ϵϵ-鄰域裏所有的樣本的集合組成的一個DBSCAN聚類簇。

5.DBSCAN聚類算法流程

1、DBSCAN發現簇的過程

         初始,給定數據集D中所有對象都被標記爲“unvisited”,DBSCAN隨機選擇一個未訪問的對象p,標記p爲“visited”,並檢查p的ϵ-領域是否至少包含MinPts個對象。如果不是,則p被標記爲噪聲點。否則爲p創建一個新的簇C,並且把p的ϵ-領域中所有對象都放在候選集合N中。DBSCAN迭代地把N中不屬於其他簇的對象添加到C中。在此過程中,對應N中標記爲“unvisited”的對象 P' ,DBSCAN把它標記爲“visited”,並且檢查它的ϵ-領域,如果 P' 的ϵ-領域至少包含MinPts個對象,則P' 的ϵ-領域中的對象都被添加到N中。DBSCAN繼續添加對象到C,直到C不能擴展,即直到N爲空。此時簇C完成生成,輸出。

     爲了找到下一個簇,DBSCAN從剩下的對象中隨機選擇一個未訪問過的對象。聚類過程繼續,直到所有對象都被訪問。

還需考慮三個問題:

        第一個是一些異常樣本點或者說少量遊離於簇外的樣本點,這些點不在任何一個核心對象在周圍,在DBSCAN中,我們一般將這些樣本點標記爲噪音點。DBSCAN算法很容易檢測異常點。

        第二個是距離的度量問題,即如何計算某樣本和核心對象樣本的距離。在DBSCAN中,一般採用最近鄰思想,採用某一種距離度量來衡量樣本距離,比如歐式距離。這和KNN分類算法的最近鄰思想完全相同。對應少量的樣本,尋找最近鄰可以直接去計算所有樣本的距離,如果樣本量較大,則一般採用KD樹或者球樹來快速的搜索最近鄰。

        第三種問題,某些樣本可能到兩個核心對象的距離都小於ϵ,但是這兩個核心對象由於不是密度直達,又不屬於同一個聚類簇,那麼如果界定這個樣本的類別呢?一般來說,此時DBSCAN採用先來後到,先進行聚類的類別簇會標記這個樣本爲它的類別。也就是說BDSCAN的算法不是完全穩定的算法。


2.DBSCAN算法流程

 

6、DBSCAN算法優缺點

優點:

        和傳統的K-Means算法相比,DBSCAN最大的不同就是不需要輸入類別數k,當然它最大的優勢是可以發現任意形狀的聚類簇,而不是像K-Means,一般僅僅使用於凸的樣本集聚類。同時它在聚類的同時還可以找出異常點,對數據集中的異常點不敏感。一般來說,如果數據集是稠密的,並且數據集不是凸的,那麼用DBSCAN會比K-Means聚類效果好很多。如果數據集不是稠密的,則不推薦用DBSCAN來聚類。

缺點:

        1、如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質量較差,這時用DBSCAN聚類一般不適合。

        2、調參相對於傳統的K-Means之類的聚類算法稍複雜,主要需要對距離閾值ϵ,鄰域樣本數閾值MinPts聯合調參,不同的參數組合對最後的聚類效果有較大影響。一般這兩個參數的確定靠經驗值。如果覺得經驗值聚類的結果不滿意,可以適當調整ϵ和MinPts的值,經過多次迭代計算對比,選擇最合適的參數值。如果MinPts不變,ϵ取得值過大,會導致大多數點都聚到同一個簇中,ϵ過小,會導致一個簇的分裂;如果ϵ不變,MinPts的值取得過大,會導致同一個簇中點被標記爲離羣點,ϵ過小,會導致發現大量的核心點。

        3、不適合高維數據,可以先進行降維操作

        4、Sklearn中效率很慢,可以先執行數據削減策略


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章