QT聚類(Quality Threshold Clustering)

本文主要介紹:QT聚類原理、優缺點及其實現。

1 聚類過程

比較簡單的一種聚類方法,通過限定類額直徑來聚類,大致過程如下

(1)設定聚類直徑閾值D;

(2)以每一個樣本爲初始聚類中心,在特徵空間,逐漸合併與之最近的樣本,直到增加樣本時,該類的直徑將超過給定閾值D;直徑D內的所有樣本歸爲一類;

(3)以每個樣本爲初始中心聚類完成後,把樣本最多的一類作爲第一類,從樣本中移除該類樣本,餘下樣本繼續進行2,直到所有樣本都歸類。

(4)根據每類樣本個數,篩選真正的聚類中心,對於樣本較少的類,可能是孤立點,可以捨棄。

 

2 優缺點:

 

優點:不需要指定聚類中心與聚類數目,是一種確定性算法;

缺點:每次都以每個樣本爲初始中心聚類,選擇樣本最多的類作爲新產生的類,計算複雜,迭代次數多;通過直徑D確定類的範圍,不能識別數據集中合理的邊界,只適用於某些特定聚類。

 

一般適合樣本整體比較分散,少數樣本比較集中的情況:


如:目標檢測中,可以提取到目標中的幾個關鍵點或角點,可以對這些關鍵點聚類,判斷哪些點是屬於一個目標的,同時可以去除一些孤立虛警點。

3 實現過程:

function idx=qtclusteuclid(G,d,D)
% QT clustering algorithm as described in:
%
% Heyer, L. J., Kruglyak, S., Yooseph, S. (1999). Exploring expression
% data: Identification and analysis of coexpressed genes. Genome Research
% 9, 1106–1115.  
%
% http://genome.cshlp.org/content/9/11/1106.full
% http://genome.cshlp.org/content/9/11/1106/F5.large.jpg
%
% if two sets A{i} have same cardinality, we pick first one
% our distance measure is Euclidean distance
%
% input:
% G-nxp data to cluster 樣本數據
% d-diameter threshold 直徑閾值
% D-Euclidean distance for all 0<i<j<=n 樣本兩兩間的距離,可以缺省
%
% output:
% idx-nx1 vector containing cluster indices
%
% Misha Koshelev
% January 20th, 2009
% Montague Laboratory
    
    n=size(G,1);
    if n<=1  %當剩下樣本數小於1時,則結束聚類
        idx=ones(n,1);
        return;
    end
    if nargin<3   %求任意兩個點之間的距離
        D=Inf*ones(n,n);
        for i=1:n
            D(i,i)=0;
            for j=i+1:n  %歐式距離
                D(i,j)=sqrt(sum((G(i,:)-G(j,:)).^2));D(j,i)=D(i,j);
            end
        end
    end

    C=[];Ccard=0;Cdiam=0;    
    for i=1:n
        flag=true;
        A=[i];Acard=1;Adiam=0;
        while flag&&length(A)<n
            pts=1:n;pts(A)=[];
            jdiam=zeros(length(pts),1);
            for pidx=1:length(pts)
                % We only need to compute maximal distance from new point j to all
                % existing points in cluster
                jdiam(pidx)=max(D(pts(pidx),A));  %取每個樣本與該類所有樣本距離的最大值,如果最大值大於直徑,
            end                                   %則表示該樣本不可能與該類樣本處於直徑爲d的圓中
			
            [minjdiam,pidx]=min(jdiam);j=pts(pidx); %j表示最大值中,最小的距離對應的樣本
            if sum(jdiam==minjdiam)>1
                dbstack;keyboard;
            end
            
            if max(Adiam,minjdiam)>d  %當前其他樣本與該類中某個樣本距離大於直徑,則結束
                flag=false;
            else
                A=[A,j];
                Acard=Acard+1;  %類內樣本個數累加
                Adiam=max(Adiam,minjdiam);   %當前類內,最大距離
            end
        end

        A=sort(A);
        if Acard>Ccard  %該類樣本個數大於之前,則更新,保證新產生的類爲樣本最多的類
            C=A;
            Ccard=Acard; %樣本最多類的樣本數
            Cdiam=Adiam; %樣本最多類的最遠距離
        end
    end

    idx=ones(n,1);
    GmC=1:n;GmC(C)=[];
    idx(GmC)=qtclusteuclid(G(GmC,:),d,D(GmC,GmC))+1;  %最多的爲一類,餘下的繼續聚類,類別號累加
    
function d=diam(G,clust,D)
% http://thesaurus.maths.org/mmkb/entry.html?action=entryByConcept&id=3279
% The largest distance between any two points in a set is called the  set's diameter. 
%
% input:
% G-nxp data for our cluster
% clust-vector of row indices into G
% D-Euclidean distance for all 0<i<j<=n
%
    
    d=0;
    for k=1:length(clust)-1
        d=max(d,max(D(clust(k),clust(k+1:end))));
    end
    

程序下載:http://download.csdn.net/detail/hong__fang/9459084




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章