續前篇---資料採礦之聚類演算法k-mediod(PAM)原理及實現

來源:互聯網
上載者:User

標籤:kmediod   pam   聚類   kmeans   

上一篇博文中介紹了聚類演算法中的kmeans演算法.

無可非議kmeans由於其演算法簡單加之分類效率較高

已經廣泛應用於聚類應用中.




然而kmeans並非十全十美的.其對於資料中的雜訊和

孤立點的聚類帶來的誤差也是讓人頭疼的.




於是一種基於Kmeans的改進演算法kmediod應運而生.

kmediod和Kmeans演算法核心思想大同小異,但是最大

的不同是在修正聚類中心的時候,kmediod是計算

類簇中除開聚類中心的每點到其他所有點

的聚類的最小值來最佳化新的聚類中心.正是

這一差別使得kmediod彌補了kmeans演算法的缺點.

kmediod對雜訊和孤立點不敏感.

但是事情都具有兩面性.這種聚類準確性的提高是犧牲聚類

時間來實現的.不難看出.kmediod需要不斷的找出每個點到

其他所有點的距離的最小值來修正聚類中心,這大大加大

了聚類收斂的時間.所有Kmediod對於大規模資料聚類

就顯得力不從心,只能適應較小規模的數值聚類.




接下來我再對kmediod的演算法描述一遍:

1.設樣本為X{x(1),x(2)........}


2.首先在樣本中隨機選取k個聚類中心.


3.然後對除開聚類中心外的樣本點計算到每個聚類中心的距離.

將樣本歸類到距離樣本中心最近的樣本點.這便實現了最初的聚類


4.再對每個類中除類中心的點外的其他樣本點計算到其他所有點的距離和的最小值.

 將該最小值點作為新的聚類中心便實現了一次聚類最佳化.


       5.重複步驟四,直到兩次聚類中心的位置不再變化,這便完成了最終的聚類

註:步驟4正體現了kmeans和kmediod的核心差異






k-mediod的matlab實現代碼如下:


clc;clear;ClomStatic=[1,2,3,25,26,27,53,54,55];len=length(ClomStatic);%求向量ClomStatic的長度k=3; %給定的類別數目%產生三個隨機整數,隨機聚類中心p=randperm(len);Temp=p(1:k);Center=zeros(1,k);for i=1:k    Center(i)=ClomStatic(Temp(i));end%計算除聚類中心外的樣本資料到聚類中心的距離,然後進行聚類TempDistance=zeros(len,3); while 1        Circulm=1;        p1=1;    p2=1;    p3=1;        JudgeEqual=zeros(1,k);    if(Circulm~=1)        clear Group1 Group2 Group3;       end    for i=1:len        for j=1:3            TempDistance(i,j)=abs(ClomStatic(i)-Center(j));        end        [RowMin RowIndex]=min(TempDistance(i,:));        if(RowIndex==1)            Group1(p1)=ClomStatic(i);            p1=p1+1;        elseif(RowIndex==2)            Group2(p2)=ClomStatic(i);            p2=p2+1;        elseif(RowIndex==3)            Group3(p3)=ClomStatic(i);            p3=p3+1;        end    end             len1=length(Group1);        len2=length(Group2);        len3=length(Group3);                        %計算Group1,Group2,Group3的均值        MeanGroup1=mean(Group1);        MeanGroup2=mean(Group2);        MeanGroup3=mean(Group3);              %分別計算每個類中除開類中心的點到其他所有點的距離和E,E最小時為該類新的聚類中心.              E=zeros(1,len1-1);              q1=1;              for j=1:len1                  for i=1:len                    if(Group1(j)~=Center(1)&&i~=j)                        E(q1)=floor(abs(Group1(j)-ClomStatic(i)));                        q1=q1+1;                    end                  end              end              NewCenter(1)=min(E);                           E=zeros(1,len2-1);              q2=1;              for j=1:len2                  for i=1:len                    if(Group2(j)~=Center(2)&&i~=j)                        E(q2)=floor(abs(Group2(j)-ClomStatic(i)));                        q2=q2+1;                    end                  end              end              NewCenter(2)=min(E);                            E=zeros(1,len3-1);              q3=1;              for j=1:len3                  for i=1:len                    if(Group3(j)~=Center(3)&&i~=j)                        E(q3)=floor(abs(Group3(j)-ClomStatic(i)));                        q3=q3+1;                    end                  end              end              NewCenter(3)=min(E);                %判斷新的類和舊類的聚類中心是否不同,不同則繼續聚類,否則聚類結束        JudgeEqual=zeros(1,k);        for i=1:k            JudgeEqual=(NewCenter==Center);        end                S=0;        for i=1:k            if(JudgeEqual(i)==1)                S=S+1;            end        end                if(S==3)            break;        end                Circulm=Circulm+1;  end


結果如下:







轉載請註明作者:小劉

續前篇---資料採礦之聚類演算法k-mediod(PAM)原理及實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.