聚類方法:DBSCAN演算法研究(1)--DBSCAN原理、流程、引數設定、優缺點以及演算法
DBSCAN聚類演算法三部分:
1、 DBSCAN原理、流程、引數設定、優缺點以及演算法;
2、 matlab程式碼實現;
3、 C++程式碼實現及與matlab例項結果比較。
DBSCAN(Density-based spatial clustering ofapplications with noise)是Martin Ester, Hans-PeterKriegel等人於1996年提出的一種基於密度的空間的資料聚類方法,該演算法是最常用的一種聚類方法[1,2]。該演算法將具有足夠密度區域作為距離中心,不斷生長該區域,演算法基於一個事實:一個聚類可以由其中的任何核心物件唯一確定
優點:
(1)聚類速度快且能夠有效處理噪聲點和發現任意形狀的空間聚類;
(2)與K-MEANS比較起來,不需要輸入要劃分的聚類個數;
(3)聚類簇的形狀沒有偏倚;
(4)可以在需要時輸入過濾噪聲的引數。
缺點:
(1)當資料量增大時,要求較大的記憶體支援I/O消耗也很大;
(2)當空間聚類的密度不均勻、聚類間距差相差很大時,聚類質量較差,因為這種情況下引數
(3)演算法聚類效果依賴與距離公式選取,實際應用中常用歐式距離,對於高維資料,存在“維數災難”。
基本概念[5]:如下基本概念在[6]中有更為詳細說明介紹。
(1)Eps鄰域:給定物件半徑Eps內的鄰域稱為該物件的Eps鄰域;
(2)核心點(core point):如果物件的Eps鄰域至少包含最小數目MinPts的物件,則稱該物件為核心物件;
(3)邊界點(edge point):邊界點不是核心點,但落在某個核心點的鄰域內;
(4)噪音點(outlier point):既不是核心點,也不是邊界點的任何點;
(5)直接密度可達(directly density-reachable)
(6)密度可達(density-reachable):如果存在一個物件鏈 p1, …,pi,.., pn,滿足p1 = p 和pn = q,pi是從pi+1關於Eps和MinPts直接密度可達的,則物件p是從物件q關於Eps和MinPts密度可達的;
(7)密度相連(density-connected):如果存在物件O∈D,使物件p和q都是從O關於Eps和MinPts密度可達的,那麼物件p到q是關於Eps和MinPts密度相連的。
(8)類(cluster):設非空集合,若滿足:,
(a),且從密度可達,那麼。(b)和密度相連。則稱構成一個類簇
有關核心點、邊界點、噪音點以及直接密度可達、密度可達和密度相連解釋如圖1[1]:
圖1紅色為核心點,黃色為邊界點,藍色為噪音點,minPts = 4,Eps是圖中圓的半徑大小有關“直接密度可達”和“密度可達”定義例項如圖2所示[5]:其中,Eps用一個相應的半徑表示,設MinPts=3,請分析Q,M,P,S,O,R這5個樣本點之間的關係。
圖2 “直接密度可達”和“密度可達”概念示意描述。根據前文基本概念的描述知道:由於有標記的各點M、P、O和R的Eps近鄰均包含3個以上的點,因此它們都是核對象;M是從P“直接密度可達”;而Q則是從M“直接密度可達”;基於上述結果,Q是從P“密度可達”;但P從Q無法“密度可達”(非對稱)。類似地,S和R從O是“密度可達”的;O、R和S均是“密度相連”(對稱)的。
DBSCAN演算法原理[5]:
(1)DBSCAN通過檢查資料集中每點的Eps鄰域來搜尋簇,如果點p的Eps鄰域包含的點多於MinPts個,則建立一個以p為核心物件的簇;
(2)然後,DBSCAN迭代地聚集從這些核心物件直接密度可達的物件,這個過程可能涉及一些密度可達簇的合併;
(3)當沒有新的點新增到任何簇時,該過程結束。
有關演算法的虛擬碼wiki百科中給出了,[5]用中文描述了其流程:
DBSCAN演算法虛擬碼描述:
輸入:資料集D,給定點在鄰域內成為核心物件的最小鄰域點數:MinPts,鄰域半徑:Eps
輸出:簇集合
(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
wiki百科中程式碼描述:
DBSCAN(D, eps, MinPts) {
C = 0
foreach point P in dataset D {
ifP is visited
continue next point
mark P as visited
NeighborPts = regionQuery(P, eps)
ifsizeof(NeighborPts) < MinPts
mark P as NOISE
else {
C = next cluster
expandCluster(P, NeighborPts, C, eps, MinPts)
}
}
}
expandCluster(P, NeighborPts, C, eps, MinPts) {
add Pto cluster C
foreach point P' in NeighborPts {
ifP' is not visited {
mark P' as visited
NeighborPts' = regionQuery(P', eps)
if sizeof(NeighborPts') >= MinPts
NeighborPts = NeighborPts joined with NeighborPts'
}
ifP' is not yet member of any cluster
add P' to cluster C
}
}
regionQuery(P, eps)
returnall points within P's eps-neighborhood (including P)
時間複雜度:
(1)DBSCAN的基本時間複雜度是 O(N*找出Eps領域中的點所需要的時間), N是點的個數。最壞情況下時間複雜度是O(N2)
(2)在低維空間資料中,有一些資料結構如KD樹,使得可以有效的檢索特定點給定距離內的所有點,時間複雜度可以降低到O(NlogN)
空間複雜度:低維和高維資料中,其空間都是O(N),對於每個點它只需要維持少量資料,即簇標號和每個點的標識(核心點或邊界點或噪音點)
引數設定: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。原文如下[2]:
(2) MinPts的選取有一個指導性的原則(a rule of thumb),MinPts≥dim+1,其中dim表示待聚類資料的維度。MinPts設定為1是不合理的,因為設定為1,則每個獨立點都是一個簇,MinPts≤2時,與層次距離最近鄰域結果相同,因此,MinPts必須選擇大於等於3的值。若該值選取過小,則稀疏簇中結果由於密度小於MinPts,從而被認為是邊界點兒不被用於在類的進一步擴充套件;若該值過大,則密度較大的兩個鄰近簇可能被合併為同一簇。因此,該值是否設定適當會對聚類結果造成較大影響。
參考資料:
[2]Ester,Martin;Kriegel, Hans-Peter; Sander,Jörg; Xu, Xiaowei (1996). Simoudis, Evangelos; Han, Jiawei; Fayyad, Usama M.,eds.Adensity-based algorithm for discovering clusters in large spatial databaseswith noise. Proceedings of the Second International Conference on KnowledgeDiscovery and Data Mining (KDD-96).AAAI Press.pp. 226–231.CiteSeerX10.1.1.121.9220.ISBN1-57735-004-9.
[3] 各種聚類演算法的比較
[14] http://download.csdn.net/download/piaominnan/8480767相關推薦
聚類方法:DBSCAN演算法研究(1)--DBSCAN原理、流程、引數設定、優缺點以及演算法
DBSCAN聚類演算法三部分: 1、 DBSCAN原理、流程、引數設定、優缺點以及演算法; 2、 matlab程式碼實現; 3、 C++程式碼實現及與matlab例項結果比較。 DBSCAN(Density-based
演算法研究(1)python實現經典排序演算法並可視化分析複雜度
排序演算法在演算法界是一個怎麼樣的存在?就好像在學術界中數學的地位,說直接用好像用不上,可是不會做起事情來總會捉襟見肘,左支右絀。找工作的時候,有的面試官甚至會讓我們手寫排序演算法。既然排序演算法如此重要,就讓我們一起去夯實基礎,切切實實得掌握它吧。 前言
基於大資料的推薦演算法研究(1)
孫遠帥. 基於大資料的推薦演算法研究[D]. 廈門大學, 2014. 讀的一篇論文的總結 總覽 基於專案層次結構的推薦演算法,並結合Hadoop技術實現矩陣分解演算法。 改進均衡相似度的餘弦距離和皮爾遜相關係數的計算公式,避免計算目標使用者與所有使
聚類方法:DBSCAN演算法研究(2)--matlab程式碼實現
DBSCAN聚類演算法三部分: 1、 DBSCAN原理、流程、引數設定、優缺點以及演算法; 2、 matlab程式碼實現; 3、 C++程式碼實現及與matlab例項結果比較。 摘要:介紹DBSCAN原理、流程、引數設
神經網路聚類方法:SOM演算法原理
一個神經網路接收外界輸入模式時,將會分為不同的對應區域,各區域對輸入模式有不同的響應特徵,而這個過程是自動完成的。其特點與人腦的自組織特性類似。SOM的目標是用低維(通常是二維或三維)目標空間的點來表
視覺SLAM之詞袋(bag of words) 模型與K-means聚類演算法淺析(1)
第一步:利用SIFT演算法從不同類別的影象中提取視覺詞彙向量,這些向量代表的是影象中區域性不變的特徵點; 第二步:將所有特徵點向量集合到一塊,利用K-Means演算法合併詞義相近的視覺詞彙,構造一個包含K個詞彙的單詞表; 第三步:統計單詞表中每個單詞在影象中出現的次數,從而將影象表示成為一個K維數值向量。
演算法優化(1):基礎知識-凸集,單峰函式,擬凸函式與凸函式,函式凹凸性定義
本文筆記介紹我最近學習的演算法優化的基礎知識,有: 最優化問題的一般形式 約束問題的分類及形式 優化問題的分類 單峰函式(Unimodal function)的定義 擬凸函式(Quasiconvex function)的定義
測量人臉顏值的標準有哪些,人臉影象演算法研究(2)
今天帶來一篇人臉識別中的顏值打分技術,所謂“顏值”,基於什麼標準來評判高低呢?既然是個“數值”,那到底能不能“測量”一下? 概述 近年來隨著人臉識別技術的發展,顏值打分也受到了廣泛的關注與研究。可即使人來打分,大家也口味各異,御姐蘿莉各有所愛。計算機又豈能判
演算法練習(1)動態規劃:買賣股票的最佳時機1
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出
pso-svm 演算法實現(1):python DEAP
在pso-svm 演算法中,引數尋優步驟大概如下: (1)PSO演算法尋找適用於SVM模型的核函式型別 Step 1:初始化粒子群規模m,設定演算法的權重因子,終止條件和初始粒子編碼; Step 2:將每個粒子的個體極值設定為當前位置,利用**適應度函
【譯】Python 金融:演算法交易 (1)基礎入門
本文翻譯自2018年最熱門的Python金融教程 Python For Finance: Algorithmic Trading。 這篇 Python 金融教程向您介紹演算法交易等內容。 技術已成為金融領域的一項資產:金融機構已不僅僅是單純的金融機構了,它正向著技術公司演進。
FCM演算法研究(二)--近五年改進文獻彙總
近年來,FCM 演算法越來越受歡迎,被應用到各個領域範圍,針對FCM演算法的改進也越來越多。本文總結了近兩年來的演算法改進,如有改進演算法不全請自己查詢哦,論文太多啦。由於參考文獻均為英文論文,這裡就不翻譯了,畢竟俺不是歪果仁。 2014年 D-FIC
iOS 給測試人員測試手機APP的四種方法:真機執行(略),打ipa包,(testFlighe)郵件,蒲公英(一)打ipa包
APP上線前測試,無外乎 一:用資料線真機除錯(以前需要下載真機除錯證書) 二:打.ipa包給測試人員(上限100人) 2.1 打包APP的.ipa 包給測試人員之前,如果沒有新增裝置的UDID號, 先進入蘋果開發者中心(添加了直接跳到2.6) 2.2點
演算法學習(1):排序演算法-插入排序及python實現
前言 插入排序應該是最容易想到的排序演算法,其核心思想是:將待排序的序列看成兩部分,以某一個元素為界,左邊的是排好序的序列,右邊是待排序的序列,每次讀取邊界上的一個元素,然後將它跟排序好的序列中的元素一個一個對比,然後排好序的元素依次挪出個空位,然後將這個元素
CamShift 目標跟蹤演算法研究(轉)
CamShift演算法: CamShift演算法,即"Continuously Apative Mean-Shift"演算法,是一種運動跟蹤演算法。它主要通過視訊影象中運動物體的顏色資訊來達到跟蹤的目的。 我把這個演算法分解成三個部分,便於理解: 1)
基礎演算法題(1)—— 題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的四位數?
題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的四位數? 分析題目,要求將1,2,3,4四個數字成各個位數不相同且無重複的四位數,可以寫四個for迴圈,每一個迴圈代表一個位數上的數字,即1——4,再定義一個int型的變數count,初始值為
三大框架:Struts+Hibernate+Spring(1)
orm 個數 可擴展 底層 cmp ioc con bsp 鼓勵 三大框架:Struts+Hibernate+Spring Java三大框架主要用來做WEN應用。 Struts主要負責表示層的顯示 Spring利用它的IOC和AOP來處理控制業務(負責對數據庫的操
第二天學習:PyCharm的使用(1)
pycharm 字體 date pri pre ase process user arm 1、配置python解析器 Create Project->Interpreter 2、配置背景色及字體 File->settings->Color Scheme
selenium2學習:單元測試框架(1)
xtu urn ace pda -- col 開頭 認識 users 1 單元測試框架 1.1 認識單元測試 Unittest提供了全局的main()方法,使用他可以方便地將一個單元測試模塊變成可以直接運行的測試腳本。Main()方法使用testload
python:一些簡單練習(1)
input 位數 div put 要求 這樣的 pass for n) 1.輸入一個數字,求從1到這個數的所有十位數和個位數不相同的數字組合及這樣的數的個數: n = 0 x = input(‘請輸入數字:‘) for item in range(1, int(x)):