基于MATLAB的模糊ISODATA算法設(shè)計_第1頁
基于MATLAB的模糊ISODATA算法設(shè)計_第2頁
基于MATLAB的模糊ISODATA算法設(shè)計_第3頁
基于MATLAB的模糊ISODATA算法設(shè)計_第4頁
基于MATLAB的模糊ISODATA算法設(shè)計_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

word文檔基于MATLAB的模糊ISODATA算法設(shè)計目錄一、前言 1二、模糊ISODATA算法的基本原理 1三、模糊ISODATA算法的基本步驟 3四、模糊ISODATA算法MATLAB程序?qū)崿F(xiàn) 7(一)模糊ISODATA算法MATLAB程序流程圖 7(二)模糊ISODATA算法程序運行結(jié)果及分析 71、初始化數(shù)據(jù) 82、修改初始化數(shù)據(jù)e,其他同1 143、修改初始化數(shù)據(jù)m,其他同1 16五、后22組樣本的聚類結(jié)果 19六、結(jié)論 20參考文獻 21程序 23word文檔一、前言 G.H.Ball與D.J.Hall于1965年提出的ISODATA算法是一個通過逐步修改聚類中心的個數(shù)與位置來達到分類目的的集群算法,后來不斷有人提出它的各種改進算法,其中包括Ball和Hall1967年提出的改進算法、CLASS、Asp等。1974年J.C.Dunn首次提出應(yīng)用模糊數(shù)學(xué)判據(jù)的ISODATA集群算法——FuzzyISODATA(IterativeSelf-OrganizingDataAnalysisTechnique)。算法通過每樣本點對各類的隸屬度矩陣表示分類結(jié)果。通過不斷修改聚類中心的位置來進行分類。1976年J.C.Bezdek把Dunn的方法推廣到更一般的情形,并得到了一些有益的結(jié)論,其中包括新的判據(jù),隸屬度函數(shù)與聚類中心的計算公式。Bezdek于1979年用W.Zangwill的理論證明了FuzzyISODATA的收斂性。該方法已在行星跟蹤系統(tǒng),心臟病分析和天氣預(yù)報等方面得到了應(yīng)用。[1]二、模糊ISODATA算法的基本原理J.C.Bezdek在普通分類基礎(chǔ)上,利用模糊集合的概念提出了模糊分類問題。認(rèn)為被分類對象集合X中的樣本以一定的隸屬度屬于某一類,即所有的樣本都分別以不同的隸屬度屬于某一類。[2]因此,每一類就被認(rèn)為是樣本集X上的一個模糊子集,于是,每一種這樣的分類結(jié)果所對應(yīng)的分類矩陣,就是一個模糊矩陣。模糊ISODATA聚類方法從選擇的初始聚類中心出發(fā),根據(jù)目標(biāo)函數(shù),用數(shù)學(xué)迭代計算的方法反復(fù)修改模糊矩陣和聚類中心,并對類別進行合并、分解和刪除等操作,直到合理為止。[3]設(shè)有限樣本集(論域),每一個樣本有s個特征。即樣本的特征的矩陣: 欲把它分為K類(),則N個樣本劃分為K類的模糊分類矩陣為: 其滿足下列三個條件: Ⅰ、Ⅱ、Ⅲ、條件Ⅱ表明每一樣本屬于各類的隸屬度之和為1;條件Ⅲ表明每一類模糊集不可能是空集合,即總有樣本不同程度的隸屬于某類。[4] 定義K個聚類中心。其中:。 第i類的中心即人為假想的理想樣本,它對應(yīng)的s個指標(biāo)值是該類樣本所對應(yīng)的指標(biāo)值的平均值: 構(gòu)造準(zhǔn)則函數(shù):其中,表示第j個樣本與第i類中心之間的歐式距離;J表示所有待聚類樣本與所屬類的聚類中心之間距離的平方和。[5] 為了確定最佳分類結(jié)果,就是尋求最佳劃分矩陣U和對應(yīng)的聚類中心Z,使J達到極小。Dunn證明了求上述泛函的極小值的問題可解。[6]三、模糊ISODATA算法的基本步驟 (1)選擇初始聚類中心。例如,可以將全體樣本的均值作為第一個聚類中心,然后在每個特征方向上加和減一個均方差,共得個聚類中心,n是樣本的維數(shù)(特征數(shù))。也可以用其他方法選擇初始聚類中心。 (2)若已選擇了K個初始聚類中心,接著利用模糊K-均值算法對樣本進行聚類。由于現(xiàn)在得到的不是初始隸屬度矩陣,而是各類聚類中心,所以算法應(yīng)從模糊K-均值算法的第四步開始,即直接計算下一步的隸屬度矩陣。[7]繼續(xù)K-均值算法直到收斂為止,最終得到隸屬度矩陣U和K個聚類中心。然后進行類別調(diào)整。 ①計算初始隸屬度矩陣,矩陣元素的計算方法為式中,是第j個樣本到第i類初始聚類中心的距離。為避免分母為零,特規(guī)定:若,則,;可見,越大,越小。②求各類的新的聚類中心,L為迭代次數(shù)。式中,參數(shù),是一個控制聚類結(jié)果模糊程度的常數(shù)??梢钥闯龈骶垲愔行牡挠嬎惚仨氂玫饺康腘個樣本,這是與非模糊的K-均值算法的區(qū)別之一。在K-均值算法中,某一類的聚類中心僅由該類樣本決定,不涉及其他類。[8]③計算新的隸屬度矩陣,矩陣元素的計算方法為式中,是第L次迭代完成時,第j個樣本到第i類聚類中心的距離。為避免分母為零,特規(guī)定:若,則,;可見,越大,越小。④回到第③步,重復(fù)至收斂。收斂條件為,其中,為規(guī)定的參數(shù)。[9] (3)類別調(diào)整。調(diào)整分三種情形: ①合并。 假定各聚類中心之間的平均距離為D,則取合并閾值為其中,是人為構(gòu)造的函數(shù),,而且應(yīng)是K的減函數(shù),通常取,α是一個可選擇的參數(shù)。可見,若D確定,則K越大時也越大,即合并越容易發(fā)生。若聚類中心和間的距離小于,則合并這兩個點而得到新的聚類中心,為式中,N為樣本個數(shù)??梢?,是和的加權(quán)平均,而所用的權(quán)系數(shù)便是全體樣本對和兩類的隸屬度。[10]②分解。 首先計算各類在每個特征方向上的“模糊化方差”。對于類的第j個特征,模糊化方差的計算公式為式中是參數(shù),通常選。,分別表示樣本和聚類中心的第j個特征值。,全體的平均值記作,然后求閾值是類數(shù)K的增函數(shù),通常取,是參數(shù)。上式表明,當(dāng)S確定時,類數(shù)K越大,越不易分解。下面分兩步進行分解:[11] 第一步,檢查各類的“聚集程度”。對于任一類,取,其中,,然后取,,其中,為一參數(shù),。表示類的聚集程度。上兩式的含義是對于每一類,首先舍去那些對它的隸屬度太小的樣本,然后計算其他各樣本對該類的平均隸屬度。[12]若(為參數(shù)),則表示類的聚集程度較高,不必進行分解;否則考慮下一步。 第二步,分解。對于任一不滿足的類考慮其每個,若,便在第j個特征方向上對聚類中心加和減(k為分裂系數(shù),),得到兩個新的聚類中心。 注意,這里每個量的計算都考慮到了全體樣本對各類的隸屬度。③刪除。 刪除某個類或聚類中心的條件有兩個。 條件1:,是參數(shù),見上式,它表示對類隸屬度超過的點數(shù)。這一條件表示對類隸屬度高的點很少,應(yīng)該刪除。 條件2:,但類不滿足分解條件,即對所有的j,。這個條件表明,在的周圍存在著一批樣本點,它們的聚集程度不高,但也不是非常分散。這時,我們認(rèn)為也不是一個理想的聚類中心。[13] 符合以上兩個條件之一者,將被刪除。 如果在第(3)步類別調(diào)整中進行了合并、分解或刪除,則在每次處理后都應(yīng)進行下面所指出的討論,并在全部處理結(jié)束后做出一個選擇:停止在某個結(jié)果上,或者轉(zhuǎn)到第(2)步重新迭代。如果在第(3)步中沒有進行任何類別調(diào)整,則表示已經(jīng)不需要改進結(jié)果,計算停止。[14] (4)關(guān)于最佳類數(shù)或最佳結(jié)果的討論上述所得為預(yù)選定分類數(shù)K時的最優(yōu)解,為局部最優(yōu)解。最優(yōu)聚類數(shù)K可借助下列判定聚類效果的指標(biāo)值得到:分類系數(shù):,F(xiàn)越接近1,聚類效果越好;平均模糊熵:,H越接近于0,聚類效果越好。由此,可以分別選定K(),計算其所得聚類結(jié)果的聚類指標(biāo)值并進行比較,求得最優(yōu)聚類個數(shù)K,即滿足F最接近1或H最接近0的K值。[15] (5)分類清晰化。兩種方法 ①與哪一類的聚類中心最接近,就將歸到哪一類。即:,若就將類。 ②對哪一類的隸屬度最大,就將它歸于哪一類。即:在U的第j列中,若則類。 當(dāng)算法結(jié)束時,就得到了各類的聚類中心以及表示各樣本對各類隸屬程度的隸屬度矩陣,模糊聚類到此結(jié)束。這時,準(zhǔn)則函數(shù)達到最小。[16]四、模糊ISODATA算法MATLAB程序?qū)崿F(xiàn)(一)模糊ISODATA算法MATLAB程序流程圖設(shè)定參數(shù)設(shè)定參數(shù)結(jié)束開始選擇初始聚類中心計算初始隸屬度矩陣求各類的新的聚類中心計算新的隸屬度矩陣類別調(diào)整:合并、分解或刪除分類清晰化NYYN(二)模糊ISODATA算法程序運行結(jié)果及分析以前29組數(shù)據(jù)樣本為參考,調(diào)節(jié)參數(shù)1、初始化數(shù)據(jù)Nc=4;%初始聚類中心數(shù)目m=2;%控制聚類結(jié)果模糊程度L=0;%迭代次數(shù)Lmax=1000;%最大迭代次數(shù)Nc_all=ones(Lmax,2);%各次迭代的分類數(shù)Udmax=10;%最后一次的隸屬度與前一次的隸屬度的差值的初始值e=0.00005;%收斂參數(shù)a=0.33;%合并閾值系數(shù)b=1;%模糊化方差參數(shù)(通常取1)r=0.1;%分解閾值參數(shù)(算法使用者掌握的參數(shù),控制G(K)的上升速度)f=0.68;%隸屬度閾值(一般取值0-0.5之間)Avms=0.83;%平均隸屬度閾值(一般應(yīng)大于0.5,0.55-0.6之間取值比較適宜)k_divide=0.9;%分裂1數(shù)(取0-1之間)w=0.2;%刪除條件參數(shù)1.1、在上述初始化數(shù)據(jù)條件下程序運行結(jié)果如下:1.2、初始Nc=5時聚類結(jié)果如下:1.3、初始Nc=6、7、8時聚類結(jié)果如下: 結(jié)果:已經(jīng)聚類為4類,但是無法畫出圖,MATLAB提示“???SWITCHexpressionmustbeascalarorstringconstant.” 原因:隸屬度矩陣U中最大值個數(shù)、各樣本到聚類中心的距離矩陣Dpc中最小值個數(shù)大于1個。 尚未找到解決辦法。1.4、初始Nc=3時聚類結(jié)果如下:1.5、初始Nc=2時聚類結(jié)果如下: 原因:分解算法中的參數(shù)選取不合適。未找到合適的參數(shù)1.6、分析 初始聚類中心數(shù)目的選取對聚類結(jié)果有較大的影響,初步分析是由于程序設(shè)計不夠完善,參數(shù)設(shè)置不夠合理。2、修改初始化數(shù)據(jù)e,其他同12.1、收斂參數(shù)e=0.5時,聚類結(jié)果如下: 迭代次數(shù):34次2.2、收斂參數(shù)e=0.00005時,聚類結(jié)果如下: 迭代次數(shù):21次2.3、收斂參數(shù)e=0.000000005時,聚類結(jié)果如下: 迭代次數(shù):34次2.4、分析e的取值是精度要求,對于整個聚類結(jié)果有一定影響,e太大時,聚類結(jié)果不精確;e的取值越小則迭代的次數(shù)越大。為了保證聚類結(jié)果的可靠性,e的取值一般為10-4~10-6。[17]3、修改初始化數(shù)據(jù)m,其他同13.1、控制聚類結(jié)果模糊程度參數(shù)m=1.5時,聚類結(jié)果如下: 迭代次數(shù):14次3.2、控制聚類結(jié)果模糊程度參數(shù)m=2時,聚類結(jié)果如下: 迭代次數(shù):21次3.3、控制聚類結(jié)果模糊程度參數(shù)m=3時,聚類結(jié)果如下: 結(jié)果:已經(jīng)聚類為5類,但是無法畫出圖,MATLAB提示“???SWITCHexpressionmustbeascalarorstringconstant.”迭代次數(shù):71次 原因:隸屬度矩陣U中最大值個數(shù)、各樣本到聚類中心的距離矩陣Dpc中最小值個數(shù)大于1個。 尚未找到解決辦法。3.4、分析加權(quán)指數(shù)m控制著模糊類間的分享程度,m值的選取對整個聚類過程和聚類結(jié)果有較大影響。參數(shù)m越接近1,分類的模糊性越小,當(dāng)m=1時,分類變成硬分類;參數(shù)m越大,分類的模糊性越大,它的意義也更不明確。[18]由于m出現(xiàn)在泛函J中作為一個指數(shù),它的值不宜太大,否則會引起失真,因而在m>1的前提下,它的值越小越好;另外m-1作為分母,故m值又不能太接近于1,否則會引起計算溢出。實際應(yīng)用中發(fā)現(xiàn),m值的選取應(yīng)注意:m值越小,迭代次數(shù)越少,分類速度越快,分類矩陣U的值越趨向于0,1兩極,最優(yōu)分類矩陣的模糊性越小,聚類效果較好;m的取值過大,會使運算的復(fù)雜度增加,使得運算的時間增加,并且造成聚類矩陣的發(fā)散。顯然,參數(shù)m的引入在數(shù)學(xué)理論上不夠嚴(yán)密,實際上如何取定m就缺乏依據(jù),從而引入一定的主觀任意性。為此,Bezdek對參數(shù)m的確定進行了模擬試驗研究,試驗結(jié)果表明,參數(shù)m以采用2為優(yōu)。[19]五、后22組樣本的聚類結(jié)果B=1423132224421422411444六、結(jié)論模糊ISODATA聚類分析方法對特性比較復(fù)雜而人們又缺少認(rèn)識的對象進行分類,可以有效地實施人工干預(yù),加入人腦思維信息,使分類結(jié)果更符合客觀實際,可以給出相對的最優(yōu)分類結(jié)果,因而具有一定的實用性。[20]然而由于該方法在計算中需要人為選擇和確定不同的參數(shù),使該方法在數(shù)學(xué)理論上顯得不夠嚴(yán)謹(jǐn)。參數(shù)的選取也缺乏理論依據(jù),選取最合適的參數(shù)也非常困難。這些參數(shù)的設(shè)定問題,直接影響到模糊分類的分類精度和算法實現(xiàn),使FuzzyISODATA算法在實際應(yīng)用中受到限制。[21]參考文獻[1]齊敏.模式識別導(dǎo)論.北京:清華大學(xué)出版社,2009.[2]陳平.模糊ISODATA集群算法TFI.北京工業(yè)大學(xué)學(xué)報.1983.9(2).89-97.[3]錢夕元.模糊ISODATA聚類分析算法的實現(xiàn)及其應(yīng)用研究.計算機工程與應(yīng)用.2004.15.70-71.[4]洪軍.FuzzyISODATA聚類分析方法的設(shè)計.計算機與數(shù)字工程.2009.37(236).19-20.[5]宓為建.動態(tài)模糊ISODATA聚類方法及其在故障診斷中的應(yīng)用.同濟大學(xué)學(xué)報.1997.25(1).66-70.[6]孫國強.改進迭代自組織數(shù)據(jù)分析法德不良數(shù)據(jù)辨識.中國電機工程學(xué)報.2006.26(11).162-166[7]武俊德.關(guān)于模糊ISODATA算法極值點的判定定理.大慶石油學(xué)院學(xué)報.1994.18(1).101-106.[8]沈照慶.基于改進模糊ISODATA算法的遙感影像非監(jiān)督聚類研究.理論研究.2008.5.28-32.[9]皋軍.基于模糊聚類的屬性加權(quán)算法.淮陰工學(xué)院學(xué)報.2007.16(3).31-35.[10]郝方平.基于模糊聚類算法的備件需求辨識模型.計算機與現(xiàn)代化.2009.11.30-32.[11]何敏.模糊ISODATA及在CRM中的應(yīng)用.計算機應(yīng)用.2005.25(6).1455-1457.[12]黃健元.模糊ISODATA聚類分析方法的改進.南京航空航天大學(xué)學(xué)報.2000.32(2).179-183.[13]汪永成.模糊聚類算法研究及在Web日志挖掘中的應(yīng)用.遼寧工程技術(shù)大學(xué).2008.16-27.[14]洪恒令.模糊目標(biāo)函數(shù)聚類算法及其應(yīng)用.長春地質(zhì)學(xué)院學(xué)報.1985.3.95-102.[15]李愛國.一種基于屬性加權(quán)模糊聚類算法.常熟理工學(xué)院學(xué)報(自然科學(xué)版).2007.21(8).104-107.[16]劉文閣.應(yīng)用FuzzyISODATA方法選擇航空科研項目.航空學(xué)報.1989.10(4).133-138.[17]劉曉東.基于ISODATA的用戶訪問路徑聚類算法.微電子學(xué)與計算機.2006.23(8).91-93.[18]任春濤.基于模糊ISODATA技術(shù)和模糊模式識別方法的水環(huán)境分區(qū)研究.中國農(nóng)村水利水電.2007.3.10-12.[19]朱永紅.模糊ISODATA聚類分析方法的VC實現(xiàn).計算機應(yīng)用.2001.21(8).142-144.[20]張祥忠.模糊聚類和模糊識別法的流動單元分類新方法.石油大學(xué)學(xué)報(自然科學(xué)版).2002.26(5).19-22.[21]舒海翅.模糊ISODATA中分類數(shù)C的確定.模糊系統(tǒng)與數(shù)學(xué).2004.18.318-322.程序closeall;%關(guān)閉窗口clearall;%清空工作空間data=xlsread('data.xls','1');%讀入樣本數(shù)據(jù)Nc=4;%初始聚類中心數(shù)目m=3;%控制聚類結(jié)果模糊程度L=0;%迭代次數(shù)Lmax=1000;%最大迭代次數(shù)Nc_all=ones(Lmax,2);%各次迭代的分類數(shù)Udmax=10;%最后一次的隸屬度與前一次的隸屬度的差值的初始值e=0.00005;%收斂參數(shù)a=0.33;%合并閾值系數(shù)b=1;%模糊化方差參數(shù)(通常取1)r=0.1;%分解閾值參數(shù)(算法使用者掌握的參數(shù),控制G(K)的上升速度)f=0.68;%隸屬度閾值(一般取值0-0.5之間)Avms=0.83;%平均隸屬度閾值(一般應(yīng)大于0.5,0.55-0.6之間取值比較適宜)k_divide=0.9;%分裂1數(shù)(取0-1之間)w=0.2;%刪除條件參數(shù)Nc_start=Nc;%調(diào)用FuzzyISODATA函數(shù)[X,Z,U,Nc,L,Dcc,Dccm,Mind,S,Smean,Fstd,T,C,k_delete,Dpc]=FussyISODATA_function(data,Nc,m,L,Lmax,Nc_all,Udmax,e,a,b,r,f,Avms,k_divide,w)[Np,Nq]=size(data);%Np樣本數(shù)目;Nq樣本維數(shù)%將聚類結(jié)果在三維圖中顯示figure;holdon;fori=1:Npforj=1:NcifNc>8disp('聚類中心數(shù)目大于8個');elseswitchX(i,1).categorycase1plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'b*');%第1類樣本,藍色*gridon;box;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第1類聚類中心,黑色ogridon;case2plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'gd');%第2類樣本,綠色菱形gridon;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第2類聚類中心,黑色ogridon;case3plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'rs');%第3類樣本,紅色方塊gridon;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第3類聚類中心,黑色ogridon;case4plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'c+');%第4類樣本,青色+gridon;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第4類聚類中心,黑色ogridon;case5plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'mx');%第5類樣本,品紅色xgridon;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第5類聚類中心,黑色ogridon;case6plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'yh');%第6類樣本,黃色六角星gridon;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第6類聚類中心,黑色ogridon;case7plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'k.');%第7類樣本,黑色.gridon;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第7類聚類中心,黑色ogridon;case8plot3(X(i,1).feature(1,1),X(i,1).feature(1,2),X(i,1).feature(1,3),'rp');%第8類樣本,紅色五角星gridon;plot3(Z(j,1).feature(1,1),Z(j,1).feature(1,2),Z(j,1).feature(1,3),'ko');%第8類聚類中心,黑色ogridon;endendendend%顯示方向軸名稱xlabel('第一特征');ylabel('第二特征');zlabel('第三特征');title('程序運行結(jié)果');%顯示各聚類中心fori=1:NcA(i,:)=Z(i,1).feature(1,:);end%顯示各樣本所屬類別fori=1:NpB(i,1)=X(i,1).category;End%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FuzzyISODATAFunction%%名稱:FussyISODATA_function%參數(shù):%data樣本特征庫%Nc初始聚類中心數(shù)目%m控制聚類結(jié)果模糊程度%L迭代次數(shù)%Lmax最大迭代次數(shù)%Nc_all各次迭代的分類數(shù)%Udmax最后一次的隸屬度與前一次的隸屬度的差值的初始值%e收斂參數(shù)%a合并閾值系數(shù)%b模糊化方差參數(shù)%r分解閾值參數(shù)%f隸屬度閾值%Avms平均隸屬度閾值%k_divide分裂系數(shù)%w刪除條件參數(shù)%返回值:%X樣本結(jié)構(gòu)體數(shù)組:樣本特征、所屬類別%Z聚類中心結(jié)構(gòu)體數(shù)組:聚類中心特征、所屬類別及其包含的樣本數(shù)%U隸屬度矩陣%Nc聚類中心數(shù)目%L迭代次數(shù)%Dcc兩兩聚類中心之間的距離矩陣%Dccm兩兩聚類中心之間的距離的平均值%Mind合并閾值%S各類在每個特征方向上的模糊化標(biāo)準(zhǔn)差矩陣%Smean模糊化標(biāo)準(zhǔn)差平均值%Fstd分解閾值%T各類超過隸屬度閾值f的樣本數(shù)矩陣%C各類的聚集程度矩陣%k_delete刪除閾值%Dpc各樣本點到各聚類中心的距離矩陣%功能:%按照FuzzyISODATA方法對樣本進行分類%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function[X,Z,U,Nc,L,Dcc,Dccm,Mind,S,Smean,Fstd,T,C,k_delete,Dpc]=FussyISODATA_function(data,Nc,m,L,Lmax,Nc_all,Udmax,e,a,b,r,f,Avms,k_divide,w) Ln=zeros(Lmax,1); [Np,Nq]=size(data);%Np為樣本數(shù)目;Nq為樣本維數(shù) fori=1:NpX(i,1).feature=[data(i,:)];%將樣本數(shù)據(jù)導(dǎo)入樣本結(jié)構(gòu)體數(shù)組 end %選取Nc個初始聚類中心 fori=1:Nc%選取前Nc個樣本為初始聚類中心X(i,1).category=i;%第i個樣本所屬類別Z(i,1).feature=X(i,1).feature;%選取初始聚類中心Z(i,1).index=i;%第i聚類Z(i,1).patternNum=1;%第i聚類中樣本數(shù) end %計算所有樣本到各初始聚類中心的距離Dpc=zeros(Nc,Np); fori=1:Ncforj=1:NpDpc(i,j)=sqrt((X(j,1).feature(1,1)-Z(i,1).feature(1,1))^2+(X(j,1).feature(1,2)-Z(i,1).feature(1,2))^2+(X(j,1).feature(1,3)-Z(i,1).feature(1,3))^2);end end %計算初始隸屬度矩陣U(0) fori=1:Ncforj=1:NpifDpc(i,j)==0%Dpc(i,j)=0時,U(i,j)=1U(i,j)=1;elsed=0;fork=1:Ncif(Dpc(k,j)==0)&(k~=i)%Dpc(i,j)=0且k~=i時,U(i,j)=0U(k,j)=0;elseif(Dpc(k,j)==0)&(k==i)%Dpc(i,j)=0且k=i時,U(i,j)=1U(k,j)=1;elsed=d+(Dpc(i,j)/Dpc(k,j))^(2/(m-1));%Dpc(i,j)~=0時,計算隸屬度函數(shù)的分母endendU(i,j)=1/d;%計算隸屬度endend end %調(diào)用求新的聚類中心及隸屬度矩陣的函數(shù) [Z,U,Nc,Nc_all,L,Dpc]=FussyISODATA_newcentre(X,Z,U,Nc,Nc_all,Np,Nq,e,m,L,Lmax,Udmax) %調(diào)用類別調(diào)整函數(shù),對聚類結(jié)果進行合并、分解或者刪除 [Z,U,Nc,Dcc,Dccm,Mind,S,Smean,Fstd,T,C,k_delete]=FussyISODATA_adjust(X,Z,U,Nc,Np,Nq,a,f,Avms,b,r,k_divide,w) %類別調(diào)整后,重新計算所有樣本到各新聚類中心的距離Dpc=zeros(Nc,Np); fori=1:Ncforj=1:NpDpc(i,j)=sqrt((X(j,1).feature(1,1)-Z(i,1).feature(1,1))^2+(X(j,1).feature(1,2)-Z(i,1).feature(1,2))^2+(X(j,1).feature(1,3)-Z(i,1).feature(1,3))^2);end end %類別調(diào)整后,計算新隸屬度矩陣U=zeros(Nc,Np); fori=1:Ncforj=1:NpifDpc(i,j)==0%Dpc(i,j)=0時,U(i,j)=1U(i,j)=1;elsed=0;fork=1:Ncif(Dpc(k,j)==0)&(k~=i)%Dpc(i,j)=0且k~=i時,U(i,j)=0U(i,j)=1;elseif(Dpc(k,j)==0)&(k==i)%Dpc(i,j)=0且k=i時,U(i,j)=1U(k,j)=1;elsed=d+(Dpc(i,j)/Dpc(k,j))^(2/(m-1));%Dpc(i,j)~=0時,計算隸屬度函數(shù)的分母endendU(i,j)=1/d;%計算隸屬度endend end%類別調(diào)整后,調(diào)用求新的聚類中心及隸屬度矩陣的函數(shù),重新計算聚類中心 [Z,U,Nc,Nc_all,L,Dpc]=FussyISODATA_newcentre(X,Z,U,Nc,Nc_all,Np,Nq,e,m,L,Lmax,Udmax)%重新劃分樣本類別fori=1:NpUmax(1,i)=max(U(:,i));%找出各樣本對所有聚類中心隸屬度的最大值endfori=1:NcZ(i,1).patternNum=0;%初始化各類包含的樣本數(shù)endfori=1:Np[i1,i2]=find(U(:,i)==Umax(1,i));%找出各樣本對所有聚類中心隸屬度的最大值在隸屬度矩陣中的位置ifsize(i1)==1%各樣本對所有聚類中心隸屬度的最大值只有1個X(i,1).category=i1;%第i個樣本所屬的類別 else%各樣本對所有聚類中心隸屬度的最大值不只1個i1=i1(fix(rand*size(i1)+1));%從多個隸屬度相同的聚類中心中,隨機選取一類X(i,1).category=i1;%第i個樣本所屬的類別 endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%聚類函數(shù)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%名稱:FussyISODATA_newcentre%參數(shù):%X樣本結(jié)構(gòu)體數(shù)組:樣本特征、所屬類別%Z聚類中心結(jié)構(gòu)體數(shù)組:聚類中心特征、所屬類別及其包含的樣本數(shù)%U隸屬度矩陣%Nc聚類中心數(shù)目%Nc_all各次迭代的分類數(shù)%Np樣本數(shù)目%Nq樣本維數(shù)%e收斂參數(shù)%m控制聚類結(jié)果模糊程度%L迭代次數(shù)%Lmax最大迭代次數(shù)%Udmax最后一次的隸屬度與前一次的隸屬度的差值的初始值%返回值:%Z聚類中心結(jié)構(gòu)體數(shù)組:聚類中心特征、所屬類別及其包含的樣本數(shù)%U隸屬度矩陣%Nc聚類中心數(shù)目%Nc_all各次迭代的分類數(shù)%L迭代次數(shù)%Dpc各樣本點到各聚類中心的距離矩陣%功能:%重復(fù)計算新的隸屬度矩陣及聚類中心,直至收斂%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function[Z,U,Nc,Nc_all,L,Dpc]=FussyISODATA_newcentre(X,Z,U,Nc,Nc_all,Np,Nq,e,m,L,Lmax,Udmax) whileUdmax>e%重復(fù)計算新的聚類中心和隸屬度矩陣,至滿足收斂條件%判斷是否超過最大迭代次數(shù),超過則跳出子函數(shù)ifL>Lmaxreturn;end Dpc=zeros(Nc,Np);%初始化各樣本點到各聚類中心的距離矩陣 %計算新的聚類中心U1=U.^m;%求隸屬度矩陣各值的m次方 A=zeros(1,Nq);%定義一個中間變量,全零矩陣 B=sum((U.^m)');%求隸屬度矩陣各值的m次方后,各行的和 fori=1:Ncforj=1:NpA(1,:)=A(1,:)+U1(i,j)*X(j).feature(1,:);%求聚類中心函數(shù)的分子endZ(i,1).feature(1,:)=A(1,:)./B(1,i);%求新的聚類中心A=zeros(1,Nq); endUp=U;%Up為第L次隸屬度矩陣 %計算所有樣本到各聚類中心的距離fori=1:Ncforj=1:NpDpc(i,j)=sqrt((X(j,1).feature(1,1)-Z(i,1).feature(1,1))^2+(X(j,1).feature(1,2)-Z(i,1).feature(1,2))^2+(X(j,1).feature(1,3)-Z(i,1).feature(1,3))^2);end end %計算第L+1次隸屬度矩陣U(L+1) fori=1:Ncforj=1:NpifDpc(i,j)==0U(i,j)=1;%U為第L+1次隸屬度矩陣elsed=0;fork=1:Ncif(Dpc(k,j)==0)&(k~=i)U(k,j)=0;elseif(Dpc(k,j)==0)&(k==i)U(k,j)=1;elsed=d+(Dpc(i,j)/Dpc(k,j))^(2/(m-1));endendU(i,j)=1/d;endend end Udmax=max(max(U-Up));%計算收斂條件值 L=L+1;%迭代次數(shù)+1Nc_all(L,1)=Nc;%記錄第L次迭代的聚類中心數(shù) end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%類別調(diào)整函數(shù)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%名稱:FussyISODATA_adjust%參數(shù):%X樣本結(jié)構(gòu)體數(shù)組:樣本特征、所屬類別%Z聚類中心結(jié)構(gòu)體數(shù)組:聚類中心特征、所屬類別及其包含的樣本數(shù)%U隸屬度矩陣%Nc聚類中心數(shù)目%Np樣本數(shù)目%Nq樣本維數(shù)%a合并閾值系數(shù)%f隸屬度閾值%Avms平均隸屬度閾值%b模糊化方差參數(shù)%r分解閾值參數(shù)%k_divide分裂系數(shù)%w刪除條件參數(shù)%返回值:%Z聚類中心結(jié)構(gòu)體數(shù)組:聚類中心特征、所屬類別及其包含的樣本數(shù)%U隸屬度矩陣%Nc聚類中心數(shù)目%Dcc兩兩聚類中心之間的距離矩陣%Dccm兩兩聚類中心之間的距離的平均值%Mind合并閾值%S各類在每個特征方向上的模糊化標(biāo)準(zhǔn)差矩陣%Smean模糊化標(biāo)準(zhǔn)差平均值%Fstd分解閾值%T各類超過隸屬度閾值f的樣本數(shù)矩陣%C各類的聚集程度矩陣%k_delete刪除閾值%功能:%調(diào)整聚類結(jié)果:合并、分解、或者刪除%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function[Z,U,Nc,Dcc,Dccm,Mind,S,Smean,Fstd,T,C,k_delete]=FussyISODATA_adjust(X,Z,U,Nc,Np,Nq,a,f,Avms,b,r,k_divide,w)%變量初始化 Dcc=zeros(Nc,Nc);%兩兩聚類中心之間的距離矩陣Dccm=0;%兩兩聚類中心之間的距離的平均值Mind=0;%合并閾值S=zeros(Nc,Nq);%各類在每個特征方向上的模糊化標(biāo)準(zhǔn)差矩陣Smean=0;%模糊化標(biāo)準(zhǔn)差平均值Fstd=0;%分解閾值T=zeros(Nc,1);%各類超過隸屬度閾值f的樣本數(shù)矩陣C=zeros(Nc,1);%各類的聚集程度矩陣k_delete=0;%刪除閾值 %1、合并 %計算各聚類中心之間的距離Dcc(i,j) DccSum=0;%所有聚類中心距離的和 fori=1:(Nc-1)forj=(i+1):Nc%兩兩聚類中心之間的距離Dcc(i,j)=sqrt((Z(j,1).feature(1,1)-Z(i,1).feature(1,1))^2+((Z(j,1).feature(1,2)-Z(i,1).feature(1,2))^2+((Z(j,1).feature(1,3)-Z(i,1).feature(1,3))^2)));DccSum=DccSum+Dcc(i,j);%所有聚類中心距離的和end end %計算各聚類中心之間的平均距離Dccm Ncc=nchoosek(Nc,2);%兩兩聚類中心的組合數(shù) Dccm=DccSum/Ncc;%兩兩聚類中心之間的距離的平均值 %計算合并閾值 Mind=Dccm*(1-1/(Nc^a)); %根據(jù)合并閾值判斷,合并聚類中心,得到新的聚類中心Y1=Z;%中間變量flag1=0;%中間標(biāo)志Nc_combine=Nc;%合并后的聚類中心數(shù)N_combine=0;%合并次數(shù) fori=1:(Nc-1)forj=(i+1):NcifDcc(i,j)<Mind%兩聚類中心之間的距離小于合并閾值時,合并這兩個聚類中心ki=sum(U(i,:));kj=sum(U(j,:));Y1(i).feature(1,:)=(ki*Z(i,1).feature(1,:)+kj*Z(j,1).feature(1,:))/(ki+kj);%合并后的聚類中心Y1(j).feature(1,:)=[zeros(1,Nq)];%被合并的聚類中心賦0N_combine=N_combine+1;%合并次數(shù)+1Nc_combine=Nc_combine-1;%類別數(shù)-1 if(Nc_combine<=2)|(Nc_combine>=8)%分類數(shù)不滿足要求時,跳出循環(huán)flag1=1;%Z=Y1;break;endendendifflag1==1break;end end %2、分解 %計算模糊化方差 S_mid=0;%中間變量 fori=1:Ncforj=1:Nqforp=1:NpS_mid=S_mid+(U(i,p)^b)*((X(p,1).feature(1,j)-Z(i,1).feature(1,j))^2);%模糊化方差的分子endS2(i,j)=S_mid/(Np-1);%模糊化方差S(i,j)=sqrt(S2(i,j));%模糊化標(biāo)準(zhǔn)差end end %計算全體模糊化方差的平均值 Smean=sum(sum(S))/(Nq*Nc); %計算分解閾值 Fstd=Smean*(Nc^r); %檢查各類的聚集程度 Sum=zeros(Nc,1);%聚集程度C的分子 fori=1:Ncforp=1:NpifU(i,p)>ft(i,p)=1;elset(i,p)=0;endT(i,1)=T(i,1)+t(i,p);%計算聚集程度C的分母Sum(i,1)=Sum(i,1)+t(i,p)*U(i,p);%計算聚集程度C的分子end end C=Sum./T;%計算聚集程度矩陣 %根據(jù)平均分解閾值判斷是否進行分解 Nc_divide=Nc;%分解后的聚類中心數(shù)N_divide=0;%分解次數(shù)flag2=0;%中間標(biāo)志Y2=Z; fori=1:NcifC(i,1)<=Avmsforj=1:3ifS(i,j)>FstdN_divide=N_divide+1;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論