1.密度:密度指的是在某距離內含有物件的最小數目。
2.核心物件:如果乙個物件的eps鄰域內至少包含minpt個物件,則稱該物件是核心物件。
3.直接密度可達:給定乙個物件集合d,如果p在q的eps鄰域內,並且q是乙個核心物件,則p是從q直接密度可達的。(如下圖所示),eps可以想象為乙個超球體的半徑,minp就是這個超球體內的點,這樣比較容易理解。
4.密度可達:對於q和p之間,有乙個樣本序列p1,p2,p3,……,pn, 其中p1=q, pn=p,若pi+1是由pi直接密度可達的(關於eps和minpts),則物件p是由q關於eps和minpts密度可達的。(如下圖所示)
在dbscan演算法中,乙個簇就是從乙個點出發,所有密度可達的點的集合,如果某乙個點不屬於任何乙個簇,也就是說這個點不能由任何點密度可達,那麼這個點被稱為異常點。
演算法流程:
1、輸入:樣本d=,鄰域引數(eps,minpts),距離的度量方式(本文中我們用歐幾里得距離來介紹,事實上大部分時候也用的是歐幾里得距離方法)
2、輸出:簇劃分、異常點索引
演算法實現:
1、初始化聚類的簇數k=0,已訪問樣本物件vt為空,分類結果result為空,異常索引noise為空。
2、遍歷m的樣本物件,判斷其是否為核心物件,若不是核心物件,在索引對應的vt中標記為1,表示該物件已訪問。如果是核心物件,則聚類簇數k=k+1,並且找到它的領域內的所有物件,標記已訪問,遍歷每乙個鄰域中的點,且在result矩陣中,所有密度可達的物件對應的索引位置都賦予k值。
3、對result矩陣取反,就是noise矩陣。也就是說result矩陣中,值為0的位置說明對應的樣本不屬於任何簇,是異常的。
總之,說的有點簡單,具體見原始碼如下。
function [result, noncore,noise] = dbscan
(setofpoints, eps, minpts)
cluster = 0;
sizeofcell = size(setofpoints,1);
result = zeros(sizeofcell,1);
%歐氏距離矩陣dmatrix,對應於各個樣本點之間的距離。
dmatrix = pdist2(setofpoints,setofpoints);
%初始化已訪問樣本和雜訊樣本。
visited = false(sizeofcell,1);
noncore = false(sizeofcell,1);
forindex = 1 : sizeofcell
if visited(index) == false
visited(index) = true;%已訪問標記。
neighbors = regionquery(index, eps);
if numel(neighbors) < minpts
noncore(index) = true;
else
cluster = cluster + 1;
expandcluster(index, neighbors, cluster, eps, minpts)%找出所有密度可達的點,歸於cluster類。
endendend
function
expandcluster
(index, neighbors, cluster, eps, minpts)
result
(index) = cluster;
temp = 1;
while
true
neighbor = neighbors(temp);
if visited(neighbor) == false
visited(neighbor) = true;
neighborssecond = regionquery(neighbor, eps);
if numel(neighborssecond) >= minpts
neighbors = [neighbors neighborssecond]; %密度可達點的索引擴充套件
endendif
result(neighbor) == 0
result(neighbor) = cluster;
endtemp = temp + 1;
if temp > numel(neighbors)
break;
endendend
function
neighbors = regionquery
(i, eps)
neighbors = find
(dmatrix(i,:)
<=eps);%返回dmatrix矩陣中第i行,小於eps的索引。
endnoise=~result;
end
基於密度的聚類演算法DBSCAN
可以發現,密度可達是直接密度可達的傳遞閉包,並且這種關係是非對稱的。密度相連是對稱關係。dbscan目的是找到密度相連物件的最大集合。eg 假設半徑 3,minpts 3,點p的e領域中有點,點m的e領域中有點,點q的e領域中有點,點o的e領域中有點,點s的e領域中有點.那麼核心物件有p,m,o,s...
基於密度的聚類之Dbscan演算法
該演算法利用基於密度的聚類的概念,即要求聚類空間中的一定區域內所包含物件 點或其他空間物件 的數目不小於某一給定閾值。dbscan演算法的顯著優點是聚類速度快且能夠有效處理雜訊點和發現任意形狀的空間聚類。但是由於它直接對整個資料庫進行操作且進行聚類時使用了乙個全域性性的表徵密度的引數,因此也具有兩個...
密度聚類演算法DBScan
利用密度聚類dbscan對樣本進行分類。基本思路 1 讀取兩組不同資料訓練 2 分別對兩組資料進行聚類 3 將聚類結果視作乙個多維空間的點,計算其到原點的歐氏距離 4 根據ans1和ans2的歐氏距離找到合適的閾值 幾個必要概念 鄰域 對於樣本集中的xj,它的 鄰域為樣本集中與它距離小於 的樣本所構...