基於密度的optics聚類算法


  DBSCAN有一些缺點,如:參數的設定,比如說閾值和半徑  這些參數對結果很敏感,還有就是該算法是全局密度的,假若數據集的密度變化很大時,可能識別不出某些簇。如下圖:

 

  核心距離:假定P是核心對象,人為給定一個閾值A,然后計算關於P點滿足閾值A的最小的半徑R,即在R內,P最少有給定A個點數。

 

  可達距離:對象q到對象p的可達距離是指p的核心距離和p與q之間歐幾里得距離之間的較大值。如果p不是核心對象,p和q之間的可達距離沒有意義。

                                                                                                                                                           

 

 

  核心距離:假若半徑ξ=8 閾值MinPts=5

則有圖而知:P是核心對象(在半徑8內,P的近鄰對象個數>5),並且P的核心距離為4   因為在半徑4內,有四個近鄰點,滿足閾值5

 

 

最小的閾值確定和核心距離

 

 

算法

注意:一個點有多個可達距離,選取最小的距離,因為最小的距離就是給點距離最近的一個簇的距離。

 

OPTICS算法的難點在於維護核心點的直接可達點的有序列表。算法的計算過程如下:

 

輸入:數據樣本D,初始化所有點的可達距離和核心距離為MAX,半徑ε,和最少點數MinPts。

 

1、建立兩個隊列,有序隊列(核心點及該核心點的直接密度可達點),結果隊列(存儲樣本輸出及處理次序)

2、如果D中數據全部處理完,則算法結束,否則從D中選擇一個未處理且未核心對象的點,將該核心點放入結果隊列,該核心點的直接密度可達點放入有序隊列,直接密度可達點並按可達距離升序排列;

3、如果有序序列為空,則回到步驟2,否則從有序隊列中取出第一個點;

3.1 判斷該點是否為核心點,不是則回到步驟3,是的話則將該點存入結果隊列,如果該點不在結果隊列;

3.2 該點是核心點的話,找到其所有直接密度可達點,並將這些點放入有序隊列,且將有序隊列中的點按照可達距離重新排序,如果該點已經在有序隊列中且新的可達距離較小,則更新該點的可達距離。

3.3 重復步驟3,直至有序隊列為空。

4、算法結束。

 

預先篩選出數據集中的核心對象,然后計算每個核心對象的核心距離。進而執行算法。

 

 

輸出結果

 

給定半徑ε,和最少點數MinPts,就可以輸出所有的聚類。

 

計算過程為:

 

給定結果隊列

 

1、從結果隊列中按順序取出點,如果該點的可達距離不大於給定半徑ε,則該點屬於當前類別,否則至步驟2;

2、如果該點的核心距離大於給定半徑ε,則該點為噪聲,可以忽略,否則該點屬於新的聚類,跳至步驟1;

3、結果隊列遍歷結束,則算法結束。

基於matlab的代碼:

% Function: 
% [RD,CD,order]=optics(x,k)
% -------------------------------------------------------------------------
% Aim: 
% Ordering objects of a data set to obtain the clustering structure 
% -------------------------------------------------------------------------
% Input: 
% x - data set (m,n); m-objects, n-variables
% k - number of objects in a neighborhood of the selected object
% (minimal number of objects considered as a cluster)
% -------------------------------------------------------------------------
% Output: 
% RD - vector with reachability distances (m,1)
% CD - vector with core distances (m,1)
% order - vector specifying the order of objects (1,m)
% -------------------------------------------------------------------------
% Example of use:
% x=[randn(30,2)*.4;randn(40,2)*.5+ones(40,1)*[4 4]];
% [RD,CD,order]=optics(x,4)
% -------------------------------------------------------------------------
% References: 
% [1] M. Ankrest, M. Breunig, H. Kriegel, J. Sander, 
% OPTICS: Ordering Points To Identify the Clustering Structure, 
% available from www.dbs.informatik.uni-muenchen.de/cgi-bin/papers?query=--CO
% [2] M. Daszykowski, B. Walczak, D.L. Massart, Looking for natural  
% patterns in analytical data. Part 2. Tracing local density 
% with OPTICS, J. Chem. Inf. Comput. Sci. 42 (2002) 500-507
% -------------------------------------------------------------------------
% Written by Michal Daszykowski
% Department of Chemometrics, Institute of Chemistry, 
% The University of Silesia
% December 2004
% http://www.chemometria.us.edu.pl

function [RD,CD,order,D]=optics(x,k)

[m,n]=size(x);  % m=70,n=2
CD=zeros(1,m);
RD=ones(1,m)*10^10;

% Calculate Core Distances
for i=1:m    
    D=sort(dist(x(i,:),x));
    CD(i)=D(k+1);   % 第k+1個距離是密度的界限閾值
end

order=[];
seeds=[1:m];

ind=1;

while ~isempty(seeds)
    ob=seeds(ind);
    %disp(sprintf('aaaa%i',ind))
    seeds(ind)=[];      
    order=[order ob];   % 更新order
    var1 = ones(1,length(seeds))*CD(ob);
    var2 = dist(x(ob,:),x(seeds,:));
    mm=max([var1;var2]);    % 比較兩個距離矩陣,選擇較大的距離矩陣
    ii=(RD(seeds))>mm;
    RD(seeds(ii))=mm(ii);
    [i1 ind]=min(RD(seeds));
    %disp(sprintf('bbbb%i',ind))
end   

RD(1)=max(RD(2:m))+.1*max(RD(2:m));



function [D]=dist(i,x)

% function: [D]=dist(i,x)
%
% Aim: 
% Calculates the Euclidean distances between the i-th object and all objects in x     
% Input: 
% i - an object (1,n)
% x - data matrix (m,n); m-objects, n-variables        
%                                                                 
% Output: 
% D - Euclidean distance (m,1)

[m,n]=size(x);
D=(sum((((ones(m,1)*i)-x).^2)'));   % 距離和

if n==1
   D=abs((ones(m,1)*i-x))';
end

 

 

 

這個是根據個人理解的主要思路


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM