0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于密度DBSCAN的聚類(lèi)算法

姚小熊27 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 2018-04-26 10:56 ? 次閱讀

聚類(lèi)算法概念

聚類(lèi)分析又稱(chēng)群分析,它是研究(樣品或指標(biāo))分類(lèi)問(wèn)題的一種統(tǒng)計(jì)分析方法,同時(shí)也是數(shù)據(jù)挖掘的一個(gè)重要算法。聚類(lèi)(Cluster)分析是由若干模式(Pattern)組成的,通常,模式是一個(gè)度量(Measurement)的向量,或者是多維空間中的一個(gè)點(diǎn)。聚類(lèi)分析以相似性為基礎(chǔ),在一個(gè)聚類(lèi)中的模式之間比不在同一聚類(lèi)中的模式之間具有更多的相似性。

聚類(lèi)的用途是很廣泛的。在商業(yè)上,聚類(lèi)可以幫助市場(chǎng)分析人員從消費(fèi)者數(shù)據(jù)庫(kù)中區(qū)分出不同的消費(fèi)群體來(lái),并且概括出每一類(lèi)消費(fèi)者的消費(fèi)模式或者說(shuō)習(xí)慣。它作為數(shù)據(jù)挖掘中的一個(gè)模塊,可以作為一個(gè)單獨(dú)的工具以發(fā)現(xiàn)數(shù)據(jù)庫(kù)中分布的一些深層的信息,并且概括出每一類(lèi)的特點(diǎn),或者把注意力放在某一個(gè)特定的類(lèi)上以作進(jìn)一步的分析;并且,聚類(lèi)分析也可以作為數(shù)據(jù)挖掘算法中其他分析算法的一個(gè)預(yù)處理步驟。

聚類(lèi)分析的算法可以分為劃分法(Partitioning Methods)、層次法(Hierarchical Methods)、基于密度的方法(density-based methods)、基于網(wǎng)格的方法(grid-based methods)、基于模型的方法(Model-Based Methods)。

聚類(lèi)算法的分類(lèi)

劃分法

劃分法(partitioning methods),給定一個(gè)有N個(gè)元組或者紀(jì)錄的數(shù)據(jù)集,分裂法將構(gòu)造K個(gè)分組,每一個(gè)分組就代表一個(gè)聚類(lèi),K《N。而且這K個(gè)分組滿(mǎn)足下列條件:

(1) 每一個(gè)分組至少包含一個(gè)數(shù)據(jù)紀(jì)錄;

(2)每一個(gè)數(shù)據(jù)紀(jì)錄屬于且僅屬于一個(gè)分組(注意:這個(gè)要求在某些模糊聚類(lèi)算法中可以放寬);

對(duì)于給定的K,算法首先給出一個(gè)初始的分組方法,以后通過(guò)反復(fù)迭代的方法改變分組,使得每一次改進(jìn)之后的分組方案都較前一次好,而所謂好的標(biāo)準(zhǔn)就是:同一分組中的記錄越近越好,而不同分組中的紀(jì)錄越遠(yuǎn)越好。

大部分劃分方法是基于距離的。給定要構(gòu)建的分區(qū)數(shù)k,劃分方法首先創(chuàng)建一個(gè)初始化劃分。然后,它采用一種迭代的重定位技術(shù),通過(guò)把對(duì)象從一個(gè)組移動(dòng)到另一個(gè)組來(lái)進(jìn)行劃分。一個(gè)好的劃分的一般準(zhǔn)備是:同一個(gè)簇中的對(duì)象盡可能相互接近或相關(guān),而不同的簇中的對(duì)象盡可能遠(yuǎn)離或不同。還有許多評(píng)判劃分質(zhì)量的其他準(zhǔn)則。傳統(tǒng)的劃分方法可以擴(kuò)展到子空間聚類(lèi),而不是搜索整個(gè)數(shù)據(jù)空間。當(dāng)存在很多屬性并且數(shù)據(jù)稀疏時(shí),這是有用的。為了達(dá)到全局最優(yōu),基于劃分的聚類(lèi)可能需要窮舉所有可能的劃分,計(jì)算量極大。實(shí)際上,大多數(shù)應(yīng)用都采用了流行的啟發(fā)式方法,如k-均值和k-中心算法,漸近的提高聚類(lèi)質(zhì)量,逼近局部最優(yōu)解。這些啟發(fā)式聚類(lèi)方法很適合發(fā)現(xiàn)中小規(guī)模的數(shù)據(jù)庫(kù)中小規(guī)模的數(shù)據(jù)庫(kù)中的球狀簇。為了發(fā)現(xiàn)具有復(fù)雜形狀的簇和對(duì)超大型數(shù)據(jù)集進(jìn)行聚類(lèi),需要進(jìn)一步擴(kuò)展基于劃分的方法。

使用這個(gè)基本思想的算法有:K-MEANS算法、K-MEDOIDS算法、CLARANS算法;

層次法

層次法(hierarchical methods),這種方法對(duì)給定的數(shù)據(jù)集進(jìn)行層次似的分解,直到某種條件滿(mǎn)足為止。具體又可分為“自底向上”和“自頂向下”兩種方案。

例如,在“自底向上”方案中,初始時(shí)每一個(gè)數(shù)據(jù)紀(jì)錄都組成一個(gè)單獨(dú)的組,在接下來(lái)的迭代中,它把那些相互鄰近的組合并成一個(gè)組,直到所有的記錄組成一個(gè)分組或者某個(gè)條件滿(mǎn)足為止。

層次聚類(lèi)方法可以是基于距離的或基于密度或連通性的。層次聚類(lèi)方法的一些擴(kuò)展也考慮了子空間聚類(lèi)。層次方法的缺陷在于,一旦一個(gè)步驟(合并或分裂)完成,它就不能被撤銷(xiāo)。這個(gè)嚴(yán)格規(guī)定是有用的,因?yàn)椴挥脫?dān)心不同選擇的組合數(shù)目,它將產(chǎn)生較小的計(jì)算開(kāi)銷(xiāo)。然而這種技術(shù)不能更正錯(cuò)誤的決定。已經(jīng)提出了一些提高層次聚類(lèi)質(zhì)量的方法。

代表算法有:BIRCH算法、CURE算法、CHAMELEON算法等;

密度算法

基于密度的方法(density-based methods),基于密度的方法與其它方法的一個(gè)根本區(qū)別是:它不是基于各種各樣的距離的,而是基于密度的。這樣就能克服基于距離的算法只能發(fā)現(xiàn)“類(lèi)圓形”的聚類(lèi)的缺點(diǎn)。

這個(gè)方法的指導(dǎo)思想就是,只要一個(gè)區(qū)域中的點(diǎn)的密度大過(guò)某個(gè)閾值,就把它加到與之相近的聚類(lèi)中去。

代表算法有:DBSCAN算法、OPTICS算法、DENCLUE算法等;

圖論聚類(lèi)法

圖論聚類(lèi)方法解決的第一步是建立與問(wèn)題相適應(yīng)的圖,圖的節(jié)點(diǎn)對(duì)應(yīng)于被分析數(shù)據(jù)的最小單元,圖的邊(或?。?duì)應(yīng)于最小處理單元數(shù)據(jù)之間的相似性度量。因此,每一個(gè)最小處理單元數(shù)據(jù)之間都會(huì)有一個(gè)度量表達(dá),這就確保了數(shù)據(jù)的局部特性比較易于處理。圖論聚類(lèi)法是以樣本數(shù)據(jù)的局域連接特征作為聚類(lèi)的主要信息源,因而其主要優(yōu)點(diǎn)是易于處理局部數(shù)據(jù)的特性。

網(wǎng)格算法

基于網(wǎng)格的方法(grid-based methods),這種方法首先將數(shù)據(jù)空間劃分成為有限個(gè)單元(cell)的網(wǎng)格結(jié)構(gòu),所有的處理都是以單個(gè)的單元為對(duì)象的。這么處理的一個(gè)突出的優(yōu)點(diǎn)就是處理速度很快,通常這是與目標(biāo)數(shù)據(jù)庫(kù)中記錄的個(gè)數(shù)無(wú)關(guān)的,它只與把數(shù)據(jù)空間分為多少個(gè)單元有關(guān)。

代表算法有:STING算法、CLIQUE算法、WAVE-CLUSTER算法;

模型算法

基于模型的方法(model-based methods),基于模型的方法給每一個(gè)聚類(lèi)假定一個(gè)模型,然后去尋找能夠很好的滿(mǎn)足這個(gè)模型的數(shù)據(jù)集。這樣一個(gè)模型可能是數(shù)據(jù)點(diǎn)在空間中的密度分布函數(shù)或者其它。它的一個(gè)潛在的假定就是:目標(biāo)數(shù)據(jù)集是由一系列的概率分布所決定的。

通常有兩種嘗試方向:統(tǒng)計(jì)的方案和神經(jīng)網(wǎng)絡(luò)的方案。

基于密度DBSCAN的聚類(lèi)算法

DBSCAN算法的原理

1、基本概念

DBSCAN(Density-BasedSpatialClusteringofApplicationwithNoise)是一種典型的基于密度的聚類(lèi)算法,在DBSCAN算法中將數(shù)據(jù)點(diǎn)分為一下三類(lèi):

核心點(diǎn)。在半徑Eps內(nèi)含有超過(guò)MinPts數(shù)目的點(diǎn)

邊界點(diǎn)。在半徑Eps內(nèi)點(diǎn)的數(shù)量小于MinPts,但是落在核心點(diǎn)的鄰域內(nèi)

噪音點(diǎn)。既不是核心點(diǎn)也不是邊界點(diǎn)的點(diǎn)

在這里有兩個(gè)量,一個(gè)是半徑Eps,另一個(gè)是指定的數(shù)目MinPts。

其他的概念

1)Eps鄰域。簡(jiǎn)單來(lái)講就是與點(diǎn)p的距離小于等于Eps的所有的點(diǎn)的集合,可以表示為基于密度DBSCAN的聚類(lèi)算法

2)直接密度可達(dá)。如果p在核心對(duì)象q的Eps鄰域內(nèi),則稱(chēng)對(duì)象p從對(duì)象q出發(fā)是直接密度可達(dá)的。

3)密度可達(dá)。對(duì)于對(duì)象鏈基于密度DBSCAN的聚類(lèi)算法:,基于密度DBSCAN的聚類(lèi)算法是從基于密度DBSCAN的聚類(lèi)算法關(guān)于Eps和MinPts直接密度可達(dá)的,則對(duì)象基于密度DBSCAN的聚類(lèi)算法是從對(duì)象基于密度DBSCAN的聚類(lèi)算法關(guān)于Eps和MinPts密度可達(dá)的。

2、算法流程

基于密度DBSCAN的聚類(lèi)算法

實(shí)驗(yàn)仿真

在實(shí)驗(yàn)中使用了兩個(gè)測(cè)試數(shù)據(jù)集,數(shù)據(jù)集的原始圖像如下:

基于密度DBSCAN的聚類(lèi)算法

(數(shù)據(jù)集1)
基于密度DBSCAN的聚類(lèi)算法

(數(shù)據(jù)集2)

數(shù)據(jù)集1相對(duì)比較簡(jiǎn)單。顯然我們可以發(fā)現(xiàn)數(shù)據(jù)集1共有兩個(gè)類(lèi),數(shù)據(jù)集2有四個(gè)類(lèi),下面我們通過(guò)DBSCAN算法實(shí)現(xiàn)數(shù)據(jù)點(diǎn)的聚類(lèi):

MATLAB代碼

主程序

%% DBSCAN

clear all;

clc;

%% 導(dǎo)入數(shù)據(jù)集

% data = load(‘testData.txt’);

data = load(‘testData_2.txt’);

% 定義參數(shù)Eps和MinPts

MinPts = 5;

Eps = epsilon(data, MinPts);

[m,n] = size(data);%得到數(shù)據(jù)的大小

x = [(1:m)‘ data];

[m,n] = size(x);%重新計(jì)算數(shù)據(jù)集的大小

types = zeros(1,m);%用于區(qū)分核心點(diǎn)1,邊界點(diǎn)0和噪音點(diǎn)-1

dealed = zeros(m,1);%用于判斷該點(diǎn)是否處理過(guò),0表示未處理過(guò)

dis = calDistance(x(:,2:n));

number = 1;%用于標(biāo)記類(lèi)

%% 對(duì)每一個(gè)點(diǎn)進(jìn)行處理

for i = 1:m

%找到未處理的點(diǎn)

if dealed(i) == 0

xTemp = x(i,:);

D = dis(i,:);%取得第i個(gè)點(diǎn)到其他所有點(diǎn)的距離

ind = find(D《=Eps);%找到半徑Eps內(nèi)的所有點(diǎn)

%% 區(qū)分點(diǎn)的類(lèi)型

%邊界點(diǎn)

if length(ind) 》 1 && length(ind) 《 MinPts+1

types(i) = 0;

class(i) = 0;

end

%噪音點(diǎn)

if length(ind) == 1

types(i) = -1;

class(i) = -1;

dealed(i) = 1;

end

%核心點(diǎn)(此處是關(guān)鍵步驟)

if length(ind) 》= MinPts+1

types(xTemp(1,1)) = 1;

class(ind) = number;

% 判斷核心點(diǎn)是否密度可達(dá)

while ~isempty(ind)

yTemp = x(ind(1),:);

dealed(ind(1)) = 1;

ind(1) = [];

D = dis(yTemp(1,1),:);%找到與ind(1)之間的距離

ind_1 = find(D《=Eps);

if length(ind_1)》1%處理非噪音點(diǎn)

class(ind_1) = number;

if length(ind_1) 》= MinPts+1

types(yTemp(1,1)) = 1;

else

types(yTemp(1,1)) = 0;

end

for j=1:length(ind_1)

if dealed(ind_1(j)) == 0

dealed(ind_1(j)) = 1;

ind=[ind ind_1(j)];

class(ind_1(j))=number;

end

end

end

end

number = number + 1;

end

end

end

% 最后處理所有未分類(lèi)的點(diǎn)為噪音點(diǎn)

ind_2 = find(class==0);

class(ind_2) = -1;

types(ind_2) = -1;

%% 畫(huà)出最終的聚類(lèi)圖

hold on

for i = 1:m

if class(i) == -1

plot(data(i,1),data(i,2),’.r‘);

elseif class(i) == 1

if types(i) == 1

plot(data(i,1),data(i,2),’+b‘);

else

plot(data(i,1),data(i,2),’.b‘);

end

elseif class(i) == 2

if types(i) == 1

plot(data(i,1),data(i,2),’+g‘);

else

plot(data(i,1),data(i,2),’.g‘);

end

elseif class(i) == 3

if types(i) == 1

plot(data(i,1),data(i,2),’+c‘);

else

plot(data(i,1),data(i,2),’.c‘);

end

else

if types(i) == 1

plot(data(i,1),data(i,2),’+k‘);

else

plot(data(i,1),data(i,2),’.k‘);

end

end

end

hold off

距離計(jì)算函數(shù)

%% 計(jì)算矩陣中點(diǎn)與點(diǎn)之間的距離

function [ dis ] = calDistance( x )

[m,n] = size(x);

dis = zeros(m,m);

for i = 1:m

for j = i:m

%計(jì)算點(diǎn)i和點(diǎn)j之間的歐式距離

tmp =0;

for k = 1:n

tmp = tmp+(x(i,k)-x(j,k)).^2;

end

dis(i,j) = sqrt(tmp);

dis(j,i) = dis(i,j);

end

end

end

epsilon函數(shù)

function [Eps]=epsilon(x,k)

% Function: [Eps]=epsilon(x,k)

%

% Aim:

% Analytical way of estimating neighborhood radius for DBSCAN

%

% Input:

% x - data matrix (m,n); m-objects, n-variables

% k - number of objects in a neighborhood of an object

% (minimal number of objects considered as a cluster)

[m,n]=size(x);

Eps=((prod(max(x)-min(x))*k*gamma(.5*n+1))/(m*sqrt(pi.^n))).^(1/n);

最終的結(jié)果

基于密度DBSCAN的聚類(lèi)算法

(數(shù)據(jù)集1的聚類(lèi)結(jié)果)
基于密度DBSCAN的聚類(lèi)算法

(數(shù)據(jù)集2的聚類(lèi)結(jié)果)

在上面的結(jié)果中,紅色的點(diǎn)代表的是噪音點(diǎn),點(diǎn)代表的是邊界點(diǎn),十字代表的是核心點(diǎn)。不同的顏色代表著不同的類(lèi)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • DBSCAN
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    10427
  • 聚類(lèi)算法
    +關(guān)注

    關(guān)注

    2

    文章

    118

    瀏覽量

    12127
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一種改進(jìn)的基于密度類(lèi)模糊支持向量機(jī)

    為了提高模糊支持向量機(jī)在數(shù)據(jù)集上的訓(xùn)練效率,提出一種改進(jìn)的基于密度類(lèi)(DBSCAN)的模糊支持向量機(jī)算法。運(yùn)用
    發(fā)表于 03-20 16:21 ?12次下載

    基于DBSCAN的批量更新類(lèi)算法

    為更新批量數(shù)據(jù),提出一種基于DBSCAN的新類(lèi)方法。該算法通過(guò)掃描原對(duì)象確定它們同增量對(duì)象間的關(guān)系,得到一個(gè)相關(guān)對(duì)象集,同時(shí)根據(jù)該相關(guān)對(duì)象和增量對(duì)象之間的關(guān)系獲得新
    發(fā)表于 03-31 10:03 ?19次下載

    基于不均勻密度的自動(dòng)類(lèi)算法

    針對(duì)基于密度類(lèi)算法不能自動(dòng)處理密度分布不均勻的數(shù)據(jù)問(wèn)題,提出一種基于不均勻密度的自動(dòng)
    發(fā)表于 04-09 09:39 ?16次下載

    適用于公交站點(diǎn)類(lèi)DBSCAN改進(jìn)算法

    提出一種適用于公交站點(diǎn)類(lèi)DBSCAN改進(jìn)算法,縮小搜索半徑ε,從而提高類(lèi)正確度,同時(shí)通過(guò)共
    發(fā)表于 04-23 09:26 ?30次下載

    一種改進(jìn)的基于密度類(lèi)的入侵檢測(cè)算法

    密度類(lèi)算法DBSCAN是一種有效的聚類(lèi)分析方法。本文構(gòu)建了網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)模型,并將一種改進(jìn)的基于密度
    發(fā)表于 08-24 08:41 ?4次下載

    基于網(wǎng)格的多密度類(lèi)算法

    提出了一種多密度網(wǎng)格類(lèi)算法GDD。該算法主要采用密度閾值遞減的多階段
    發(fā)表于 08-27 14:35 ?11次下載

    基于網(wǎng)格的快速搜尋密度峰值的類(lèi)算法優(yōu)化研究

    CFSFDP是基于密度的新型類(lèi)算法,可類(lèi)非球形數(shù)據(jù)集,具有
    發(fā)表于 11-21 15:08 ?15次下載

    基于密度的K-means算法類(lèi)數(shù)目中應(yīng)用

    針對(duì)傳統(tǒng)的K-means算法無(wú)法預(yù)先明確類(lèi)數(shù)目,對(duì)初始類(lèi)中心選取敏感且易受離群孤點(diǎn)影響導(dǎo)致
    發(fā)表于 11-25 11:35 ?0次下載

    基于層次劃分的密度優(yōu)化類(lèi)算法

    針對(duì)傳統(tǒng)的類(lèi)算法對(duì)數(shù)據(jù)集反復(fù)類(lèi),且在大型數(shù)據(jù)集上計(jì)算效率欠佳的問(wèn)題,提出一種基于層次劃分的最佳
    發(fā)表于 12-17 11:27 ?0次下載
    基于層次劃分的<b class='flag-5'>密度</b>優(yōu)化<b class='flag-5'>聚</b><b class='flag-5'>類(lèi)</b><b class='flag-5'>算法</b>

    基于密度差分的自動(dòng)類(lèi)算法

    類(lèi)作為無(wú)監(jiān)督學(xué)習(xí)技術(shù),已在實(shí)際中得到了廣泛的應(yīng)用,但是對(duì)于帶有噪聲的數(shù)據(jù)集,一些主流算法仍然存在著噪聲去除不徹底和類(lèi)結(jié)果不準(zhǔn)確等問(wèn)題.本
    發(fā)表于 12-18 11:16 ?0次下載

    中點(diǎn)密度函數(shù)的模糊類(lèi)算法

    針對(duì)傳統(tǒng)模糊C一均值( FCM)類(lèi)算法初始類(lèi)中心不確定,且需要人為預(yù)先設(shè)定聚類(lèi)類(lèi)別數(shù),從而導(dǎo)
    發(fā)表于 12-26 15:54 ?0次下載

    基于數(shù)據(jù)劃分和融合策略的并行DBSCAN算法

    歸為一類(lèi),而將不具有該特征的項(xiàng)排除在外。主流的類(lèi)方法包括基于劃分的類(lèi)方法,如K-means;層次
    發(fā)表于 02-08 14:58 ?0次下載

    可檢測(cè)出租車(chē)載客的軌跡類(lèi)算法

    目前常見(jiàn)的軌跡類(lèi)大多基于 OPTICS、 DBSCAN和K- means等算法,但這些類(lèi)方法
    發(fā)表于 03-11 17:40 ?13次下載
    可檢測(cè)出租車(chē)載客的軌跡<b class='flag-5'>聚</b><b class='flag-5'>類(lèi)</b><b class='flag-5'>算法</b>

    改進(jìn)的DBSCAN類(lèi)算法在Spark平臺(tái)上的應(yīng)用

    針對(duì) DBSCAN( Density- based Spatial Clustering of Applications with Noise)類(lèi)算法內(nèi)存占用率較高的問(wèn)題,文中
    發(fā)表于 04-26 15:14 ?9次下載
    改進(jìn)的<b class='flag-5'>DBSCAN</b><b class='flag-5'>聚</b><b class='flag-5'>類(lèi)</b><b class='flag-5'>算法</b>在Spark平臺(tái)上的應(yīng)用

    基于特征提取和密度類(lèi)的鋼軌識(shí)別算法

    解決上述問(wèn)題,文中提出一種基于擴(kuò)展Har特征提取和 DBSCAN密度類(lèi)的鋼軌識(shí)別算法。首先通過(guò)仿射變換、池化、灰度均衡仳、邊緣檢測(cè)等
    發(fā)表于 06-16 15:03 ?5次下載