canopy聚類算法的MATLAB程序


canopy聚類算法的MATLAB程序

凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/

1. canopy聚類算法簡介

    Canopy聚類算法是一個將對象分組到類的簡單、快速、精確地方法。每個對象用多維特征空間里的一個點來表示。這個算法使用一個快速近似距離度量和兩個距離閾值T1>T2來處理。基本的算法是,從一個點集合開始並且隨機刪除一個,創建一個包含這個點的Canopy,並在剩余的點集合上迭代。對於每個點,如果它的距離第一個點的距離小於T1,然后這個點就加入這個聚集中。除此之外,如果這個距離<T2,然后將這個點從這個集合中刪除。這樣非常靠近原點的點將避免所有的未來處理,不可以再做其它Canopy的中心。這個算法循環到初始集合為空為止,聚集一個集合的Canopies,每個可以包含一個或者多個點。每個點可以包含在多於一個的Canopy中。

    Canopy算法其實本身也可以用於聚類,但它的結果可以為之后代價較高聚類提供幫助,其用在數據預處理上要比單純拿來聚類更有幫助。Canopy聚類經常被用作更加嚴格的聚類技術的初始步驟,像是K均值聚類。建立canopies之后,可以刪除那些包含數據點數目較少的canopy,往往這些canopy是包含孤立點的。

    Canopy算法的步驟如下:

(1) 將所有數據放進list中,選擇兩個距離,T1,T2,T1>T2

(2)While(list不為空)

    { 

        隨機選擇一個節點做canopy的中心;並從list刪除該點;

        遍歷list:

        對於任何一條記錄,計算其到各個canopy的距離;

        如果距離<T2,則給此數據打上強標記,並從list刪除這條記錄;

        如果距離<T1,則給此數據打上弱標記;

        如果到任何canopy中心的距離都>T1,那么將這條記錄作為一個新的canopy的中心,並從list中刪除這個元素;

    }

    需要注意的是參數的調整:
        當T1過大時,會使許多點屬於多個Canopy,可能會造成各個簇的中心點間距離較近,各簇間區別不明顯;
        當T2過大時,增加強標記數據點的數量,會減少簇個個數;T2過小,會增加簇的個數,同時增加計算時間;

2. MATLAB程序

clear
clc
%%%%%%%%%%%%%%% 加載數據 %%%%%%%%%%%%%%%%%%
X = dlmread('iris.data');
[~,X_dim]=size(X);
X=X(:,1:X_dim-1);
[num,dim] = size(X);
N=100;
k=zeros(N,1);
for t=1:N
    %%%%%%%%%%%%%%% 抽樣 %%%%%%%%%%%%%%%%%%
    sample=round(num/10);
    rand_array=randperm(num);
    X_part=X(rand_array(1:sample),:);  
    D=pdist(X_part);
    miu=mean(D);
    sigma=std(D);
    T2=miu+5*sigma;
    K_max=20;
    %%%%%%%%%canopy 自動划分聚類中心和個數%%%%%%%%%
    k(t) = 0; 
    YB=[X zeros(num,1)];  
    Centr=zeros(K_max,dim);
    while size(YB,1) && (k(t)<K_max)
        k(t)=k(t)+1; 
        Centr(k(t),:)=YB(1,1:dim);
        YB(1,:)=[];            %在選取第一個點為聚類點並刪除
        L=size(YB,1); 
        if L
            dist1=(YB(:,1:dim)-ones(L,1)*Centr(k(t),1:dim)).^2;   %計算歐式距離
            dist2=sum(dist1,2);   
        end
        for i=1:L-1
            if(dist2(i)<T2)  %<T2說明是該類,在矩陣中刪除
               YB(i,dim+1)=1;
            end
        end 
        YB(YB(:,dim+1)==1,:)=[];  %刪除已歸類的元素
    end
end
tabulate(k(:))

數據見:MATLAB實例:PCA降維中的iris數據集,保存為:iris.data,最后一列是類標簽。

3. 結果

  Value    Count   Percent
      1        0      0.00%
      2        0      0.00%
      3       99     99.00%
      4        0      0.00%
      5        1      1.00%

K=3為最終結果。注意:實驗結果與T2的選取有很大關系,視具體數據而定。

4. 參考文獻

[1] 數據挖掘筆記-聚類-Canopy-原理與簡單實現

[2] canopy_kmeans 代碼 matlab實現 圖像分割


免責聲明!

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



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