1. 程式人生 > >機器學習學習筆記 第二十章 聚類演算法-DBSCAN

機器學習學習筆記 第二十章 聚類演算法-DBSCAN

聚類演算法-DBSCAN

Density-Based Spatial Clustering of Applications with Noise

基本概念:

  • 核心物件:若某個點的密度達到演算法設定的閾值則其為核心點。
    • 相當於在r的鄰域內點的數量不小於我們設定的閾值
  • ϵ-鄰域的距離閾值是我們設定的半徑r
  • 直接密度可達:若某點p在點q的 r 鄰域內,且q是核心點則p-q直接密度可達。
  • 密度可達:若有一個點的序列q0、q1、…qk,對任意qi~qi-1是直接密度可達的 ,則稱從q0到qk密度可達,這實際上是直接密度可達的“傳播”。
  • 密度相連:若從某核心點p出發,點q和點k都是密度可達的 ,則稱點q和點k是密度相連的。
  • 邊界點:屬於某一個類的非核心點,不能發展下線了
  • 噪聲點:不屬於任何一個類簇的點,從任何一個核心點出發都是密度不可達的
    • 相當於某個點距離有點遠,可以理解成是沒有用的干擾點
      1
  • 上圖中,點的分類分別是:
    1. A——核心物件
    2. B,C——邊界點:因為這兩個點不能再發展下線了
    3. N——離群點:因為這個點所代表的這一片區域再也找不到其他點了,離群了

工作流程:

所需引數

  • 引數D:所需資料集
  • 引數ϵ:指定的半徑
  • MinPts:密度閾值

詳細流程

for(資料集D中每個物件p) do
   if (p已經歸入某個簇或標記為噪聲) then
        continue;
   else
        檢查物件p的Eps鄰域 NEps(p) ;
        if (NEps(p)包含的物件數小於MinPts) then
                標記物件p為邊界點或噪聲點;
        else
                標記物件p為核心點,並建立新簇C, 並將p鄰域內所有點加入C
                for (NEps(p)中所有尚未被處理的物件q)  do
                       檢查其Eps鄰域NEps(q),若NEps(q)包含至少MinPts個物件,則將NEps(q)中未歸入任何一個簇的物件加入C;
                end for
        end if
    end if
end for
來自:https://blog.csdn.net/zhouxianen1987/article/details/68945844

引數的選擇:

  • 半徑ϵ:可以根據K距離來設定:找突變點 K距離:給定資料集P={p(i); i=0,1,…n},計算點P(i)到集合D的子集S中所有點 之間的距離,距離按照從小到大的順序排序,d(k)就被稱為k-距離
  • MinPts:k-距離中k的值,一般取的小一些,多次嘗試

總而言之,上面的都要多次嘗試

優勢劣勢

優勢

  1. 不需要指定簇的個數,演算法會分配好的
  2. 可以發現任意形狀的簇,這是比K-MEANS強大很多的地方
  3. 擅長找到離群點,演算法會檢測出來的
  4. 我們提供兩個引數就夠了,不用過度費腦

劣勢:

  1. 高維度的資料處理還是有些困難
  2. 引數難以選擇(引數對結果影響很大)
  3. 在sklearn中執行效率比較慢(可以採用資料削減策略)

推薦一個視覺化展示的一個網站,這個網站演示了DBSCAN演算法的一個工作流程

我們要多多嘗試不同的半徑和不同的minpoints,仔細研究這兩個因素對分類結果的影響

對唐宇迪老師的機器學習教程進行筆記整理
編輯日期:2018-10-12
小白一枚,請大家多多指教