十分鐘學會DBSCAN算法

2021-02-13 交通科研Lab

將物理或抽象對象的集合分成由類似的對象組成的多個類的過程被稱為聚類。由聚類所生成的簇是一組數據對象的集合,這些對象與同一個簇中的對象彼此相似,與其他簇中的對象相異。常用的聚類算法包括原型聚類、密度聚類和層次聚類三大類。

其中密度聚類算法(density-based clustering)假設聚類結構能通過樣本分布的緊密程度確定。通常情況下,密度聚類算法從樣本密度角度考察樣本之間的可連接性,並基於可連接性不斷擴展聚類簇以獲得最終的聚類效果。

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一種典型的密度聚類算法。其在交通領域的數據處理中有著廣泛的應用和獨特的優勢。下面科研Lab將從算法優勢、概念原理、案例講解(附代碼)三部分講解DBSCAN。

①作為密度聚類的經典算法,DBSCAN可以處理不同大小、形狀的數據集,同時聚類結果產生的簇(性質相似的樣本數據組成的最大非空子集)形狀、大小、數量是任意的。以出行行為分析為例,研究之前,我們對出行鏈或站點的聚類結果是未知的,某種意義上,其聚類後的形狀、大小、數量也是任意的。

②DBSCAN以高密度確定簇,同時自動將不屬於任何簇的樣本數據作為噪音捨棄,避免了噪音數據為結果產生的影響。仍以出行行為分析為例,由於罕見原因(重大活動,惡劣天氣等等)產生的出行鏈數據,其發生概率很小,在一般性的研究中使用DBSCAN去除,既不影響研究目的,也可以避免「特殊」出行鏈對結果產生的幹擾。

DBSCAN算法有兩個全局參數:ε和MinPts,在其基礎上定義鄰域,從而刻畫樣本分布的緊密程度。給定樣本集D={x1, x2, … xm},定義以下概念:

①ε-鄰域:對,其ε-鄰域包含樣本集D中與的距離不大於的樣本,即

;

這裡的距離指的是歐氏距離

,感興趣的小夥伴可以自行了解閔可夫斯基距離。

②核心點(核心元素):若的ε-鄰域至少包含MinPts個樣本,即,即是一個核心點;

③邊界點:若的ε-鄰域樣本數量少於MinPts,且位於核心點的ε-鄰域內,則稱為邊界點;

④噪音點:若既不是核心點,也不是邊界點,則稱為噪音點;

⑤密度直達:若位於的ε-鄰域中,且是核心對象,則稱是由密度直達;

⑥密度可達:對,若存在樣本序列,其中密度直達,則稱密度可達;

⑦密度相連:對,若存在使得均由密度可達,則稱密度相連。

更直觀的可以看下圖,MinPts=3,所有圓等大且半徑為ε。

 1可由2密度直達、4可由3密度直達、2和3互相密度直達;  

 1可由3密度可達,4可由2密度可達;

 1與4密度相連。

基於以上概念,DBSCAN將「簇」定義為:由密度可達關係導出的最大密度相連的樣本集合。給定鄰域參數(ε和MinPts),簇C∈D是滿足連接性和最大性的非空樣本子集:

連接性:若∈C,∈C,則一定有密度相連;

最大性:若∈C,密度可達,則∈C。

①  導入包:

import numpy as npimport pandas as pdimport randomfrom sklearn import datasetsimport matplotlib.pylot as plt

 

②  生成數據集:

 

%matplotlib inlinedataset,_ =datasets.make_moons(500,noise = 0.1,random_state=1)df =pd.DataFrame(dataset,columns = ['X','Y'])df.plot.scatter('X','Y',s=100,alpha=0.6, title='dataset by make_moon')

註:數據無量綱

 

 樣本集可視化得到:

算法先根據給定的鄰域參數(ε和MinPts)找出所有的核心對象;在以任意核心對象為出發點,找出由其密度可達的樣本生成聚類簇,直到所有的核心對象被訪問過。

① 初始化鄰域參數:

② 在建立鄰域字典的基礎上,搜索所有核心元素:

dataset=dataset.tolist()i=0while i<len(dataset):    dataset[i]=[i+1]+dataset[i]    i+=1N_dict = {}for i in dataset:    n_tem = [] #臨時存儲鄰域    for j in dataset:        dist=((i[1]-j[1])**2+(i[2]-j[2])**2)**0.5#距離使用歐式距離        if dist<=r:            n_tem.append(j[0])        N_dict[i[0]]=n_temU = []i = 1while i <= 500:    if len(N_dict[i]) >= minpts:        U.append(i)    i +=1print("the core points are ",U)

③ 聚類:以任意核心對象為出發點,找出由其密度可達的樣本生成聚類簇,直到所有核心對象被訪問過。

C = []DS =[i for i in range(1,501)]
while U != []: DS_old = DS[:] print("當前未訪問過的樣本集合:",DS_old) Q1 = random.sample(U,1) print("隨機選取的核心元素:",Q1[0]) DS.remove(Q1[0])
Q2 = []
while Q1 != []: print("本次研究的points集:",Q1) num = Q1.pop(0) print("取出的元素:",num)
if num in U: for i in N_dict[num]: if i != num and i in DS and inot in Q1: Q1.append(i) DS.remove(i)

print("DS_old:",DS_old) print("DS",DS) for i in DS_old: if i not in DS: Q2.append(i) print("簇:",Q2) C.append(Q2)
for i in Q2: if i in U: U.remove(i)
noise = []for i in DS: if i not in C[0] and i not in C[1]: noise.append(i)print("最終簇為:",C)print("噪音為",noise)

④ 可視化。

通過可視化,得到下圖

其中黃色代表簇1,紅色代表簇2,藍色代表噪音點。 

參考文獻:[1]周志華.機器學習2016[M].北京:清華大學出版社.2016.

 

本期講解就到這裡啦,下期推送講講解使用sklearn庫實現DBSCAN算法,同時介紹DBSCAN算法的改進模型,如果你喜歡本篇文章的話,請點讚,轉發,關注!

編輯:莊楨

「交通科研Lab」:分享學習點滴,期待科研交流!

如果覺得還不錯

點這裡👇👇👇

相關焦點

  • DBSCAN聚類算法原理總結
    如下圖簇類ABC的密度大於周圍的密度,噪聲的密度低於任一簇類的密度,因此DBSCAN算法也能用於異常點檢測。本文對DBSCAN算法進行了詳細總結 。目錄1. DBSCAN算法的樣本點組成2. DBSCAN算法原理3. DBSCAN算法的參數估計4.
  • 從零開始學Python【31】—DBSCAN聚類(實戰部分)
    函數說明在Python的sklearn模塊中,cluster子模塊集成了常用的聚類算法,如K均值聚類、密度聚類和層次聚類等。算法實戰在密度聚類算法的實戰部分,我們將使用國內31個省份的人口出生率和死亡率數據作為分析對象。
  • 【他山之石】DBSCAN密度聚類算法(理論+圖解+python代碼)
    作者:風弦鶴CSDN博客地址:https://blog.csdn.net/huacha__/article/details/81094891本文主要內容:1、前言2、DBSCAN聚類算法3、參數選擇4、DBSCAN算法迭代可視化展示5、常用評估方法:輪廓係數
  • 詳解DBSCAN聚類
    如果您還記得的話,這是一種有監督的ML聚類算法,它根據新數據點與其他「已知」數據點的距離來聚類。我們在帶標記的訓練數據上訓練一個KNN模型,以確定哪些數據點屬於哪個聚類。當我們將模型應用到新數據時,算法根據與訓練過的聚類的距離來確定新數據點屬於哪一個聚類。我們必須確定「k」參數,它指定在將新數據點分配給一個集群之前,模型將考慮多少個最鄰近點。
  • 有了K均值聚類,為什麼還需要DBSCAN聚類算法?
    2014年,DBSCAN算法在領先的數據挖掘會議ACM SIGKDD上獲得the testof time獎(授予在理論和實踐中受到廣泛關注的算法)。所有聚類法都使用相同的方法,即首先計算相似度,然後使用相似度將數據點聚類為組或群。本文將重點介紹具有噪聲的基於密度的聚類方法(DBSCAN)。
  • 2016公務員考試申論指導:十分鐘學會寫通知
    2016公務員考試申論指導:十分鐘學會寫通知由廣東公務員考試網申論欄目由提供,更多關於2016公務員考試申論指導,十分鐘學會寫通知,廣東公務員申論的內容,請關注廣東公務員考試頻道/廣東公務員考試網!
  • ...分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R實現)
    深度神經網絡在圖像、音頻和文本等數據上表現優異,並且該算法也很容易對新數據使用反向傳播算法更新模型參數。它們的架構(即層級的數量和結構)能夠適應於多種問題,並且隱藏層也減少了算法對特徵工程的依賴。缺點:深度學習算法通常不適合作為通用目的的算法,因為其需要大量的數據。實際上,深度學習通常在經典機器學習問題上並沒有集成方法表現得好。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    本文也不會對每個算法都進行梳理。因為現有太多算法,而且新的算法也層出不窮。然而,這份清單將向讀者展現對每個任務而言目前具有代表性的算法概覽。1、回歸方法回歸方法是一種對數值型連續隨機變量進行預測和建模的監督學習算法。使用案例一般包括房價預測、股票走勢或測試成績等連續變化的案例。回歸任務的特點是標註的數據集具有數值型的目標變量。
  • 倪新威十分鐘超級記憶法是真的嗎 十分鐘超級記憶法下載
    十分鐘超級記憶法到底是不是真的?不少了解一些十分鐘超級記憶法的家長和孩子對此問題都十分關注。學習講究的是方法,死記硬背絕對不能起到很好的效果。那麼,十分鐘超級記憶法到底是不是真的呢?十分鐘超級記憶法到底是不是真的?時下教育孩子是父母最關注的話題,簡單明了就是怎樣教育好孩子,能把孩子潛能激發出來的教育,培養孩子學會學習,學會追求幸福未來,學會如何成功成才的教育。
  • 編程實驗1——學會用流程圖描述算法
    一、實驗目的1、找出解決現實問題的算法2、學會用Visio 2013繪製流程圖二、實驗內容1、問題的提出實驗要求:請根據該停車場的規定,給出解決上述問題的算法並繪製流程圖。2、分析問題並給出問題的文本描述算法認真閱讀和理解問題,並用文字給出解決該問題的算法。
  • 學會這套訓練不怕健身房不開門!每天十分鐘,在家也能高效減肥
    即使我國國內疫情逐步得到控制,許多復工復產也在同時進行,但對於健身房這種人口流動較大,空間又較密閉的環境,營業時間仍然是個謎,所以我們蝸居家中也要學會運動,控制好自身的體脂率,保持一個健康的身體狀態,即使在等待健身房開門的日子裡,也不至於令自己的身體「久疏沙場」。
  • 什麼是算法?快速學會使用python編寫算法
    01什麼是算法?我們來看百度百科對算法的解釋:算法是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令。我們可以理解算法就是計算機面對一個問題的解決方法。比如,我們要求計算機幫我們將輸入的100個整數從小到大進行排序,那麼排序的具體方法,就是算法。舉個例子,比如我們現在有這麼一列數據 [ 5,7,8,3,1],現在需要程序幫我們進行從小到大進行排序。應該怎麼辦呢?
  • 十分鐘學會用精靈語寫自己的名字
    有機體生存指南issue 008◆Tengwar 速成:十分鐘學會用精靈文寫名字我就是這麼打算的,十分鐘學會用精靈文寫自己的名字,這也沒那麼難嘛。說字母表,字母表就到:
  • 只要微波爐,十分鐘包你學會!
    只要微波爐,十分鐘包你學會!原料:雞蛋、小麥粉、黑芝麻、小蘇打、鹽。做法步驟:第1步、小麥粉,黑芝麻,小蘇打,鹽倒入碗中混合均勻。第2步、分離蛋清蛋黃,蛋清放入麵粉中攪拌一下,然後用手和成麵團。(要是覺得有點硬可以稍微加點水)。
  • 十分鐘一起學會ResNet殘差網絡
    好了,今天的十分鐘就帶你一起學會ResNet,下次的十分鐘我們再見。你也許還想看:●乾貨 | 史上最全中文分詞工具整理● 5分鐘配置好你的AI開發環境● 入門 | Tensorflow實戰講解神經網絡搭建詳細過程歡迎掃碼關注:
  • 課間十分鐘,你的孩子都在幹嘛?看好學生的課間十分鐘,明白差距
    說起課間十分鐘,隨著季節的變化,孩子們進行戶外運動的機會越來越多了。而作為老師,有時候也比較頭疼,尤其是小學高年級段的男生,上課音樂響起,他們還在操場上進行著倒數10秒的投籃。老師這邊都已經翻開書本了,這些男孩子們滿頭大汗跑進教室,能讓他們安靜下來進入課堂環境中跟上老師講課的節奏,至少要10分鐘的時間。
  • 十分鐘學會英文指令,蘇寧智能晾衣架成CES網紅
    十分鐘學會一門語言,方言外語樣樣通  蘇寧智慧家庭體驗館內,蘇寧極物·小亮智能晾衣機竟引起消費者的爭搶互動。  據了解,小亮內置了強大的語言學習功能,能在十分鐘學習一種方言或外語。只要喊它的名字「小亮小亮」,就可以解放雙手全語音操控。除了語音操控,在BiuOS的支持下,小亮智能晾衣機還支持蘇寧小Biu智能音箱操控,或通過遙控器、手機App遠程操控,多種方式滿足不同用戶的習慣。