模糊c均值聚類+FCM算法的MATLAB代碼_第1頁
模糊c均值聚類+FCM算法的MATLAB代碼_第2頁
模糊c均值聚類+FCM算法的MATLAB代碼_第3頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、模糊 c 均值聚類FCM 算法的 MATLAB代碼我做畢業(yè)論文時需要模糊C-均值聚類,找了好長時間才找到這個,分享給大家:FCM 算法的兩種迭代形式的MA TLAB代碼寫于下 ,也許有的同學(xué)會用得著:m 文件 1/7:function U,P,Dist,Cluster_Res,Obj_Fcn,iter=fuzzycm(Data,C,plotflag,M,epsm)% 模糊 C 均值聚類 FCM: 從隨機(jī)初始化劃分矩陣開始迭代% U,P,Dist,Cluster_Res,Obj_Fcn,iter = fuzzycm(Data,C,plotflag,M,epsm)% 輸入 :%Data: N &#

2、215;S 型矩陣 ,聚類的原始數(shù)據(jù),即一組有限的觀測樣本集,%Data 的每一行為一個觀測樣本的特征矢量,S 為特征矢量%的維數(shù) ,N 為樣本點的個數(shù)% C:聚類數(shù) ,1<C<N% plotflag: 聚類結(jié)果 2D/3D 繪圖標(biāo)記 ,0 表示不繪圖 ,為缺省值% M:加權(quán)指數(shù) ,缺省值為 2% epsm: FCM 算法的迭代停止閾值 ,缺省值為 1.0e-6% 輸出 :% U:C× N 型矩陣 ,FCM 的劃分矩陣% P:C× S 型矩陣 ,FCM 的聚類中心 ,每一行對應(yīng)一個聚類原型%Dist: C × N 型矩陣 ,FCM 各聚類中心到各樣本點

3、的距離,聚類中%心 i 到樣本點j 的距離為Dist(i,j)% Cluster_Res: 聚類結(jié)果 ,共 C 行 ,每一行對應(yīng)一類% Obj_Fcn: 目標(biāo)函數(shù)值% iter: FCM 算法迭代次數(shù)% See also: fuzzydist maxrowf fcmplotif nargin<5epsm=1.0e-6;endif nargin<4M=2;endif nargin<3plotflag=0;endN,S=size(Data);m=2/(M-1);iter=0;Dist(C,N)=0; U(C,N)=0; P(C,S)=0;% 隨機(jī)初始化劃分矩陣U0 = rand(

4、C,N);U0=U0./(ones(C,1)*sum(U0);% FCM 的迭代算法while true% 迭代計數(shù)器iter=iter+1;% 計算或更新聚類中心PUm=U0.M;P=Um*Data./(ones(S,1)*sum(Um')'% 更新劃分矩陣 U for i=1:Cfor j=1:N Dist(i,j)=fuzzydist(P(i,:),Data(j,:);endendU=1./(Dist.m.*(ones(C,1)*sum(Dist.(-m);% 目標(biāo)函數(shù)值 : 類內(nèi)加權(quán)平方誤差和if nargout>4 | plotflagObj_Fcn(iter)

5、=sum(sum(Um.*Dist.2);end% FCM 算法迭代停止條件if norm(U-U0,Inf)<epsmbreakendU0=U;end% 聚類結(jié)果if nargout > 3res = maxrowf(U);for c = 1:Cv = find(res=c);Cluster_Res(c,1:length(v)=v;endend% 繪圖if plotflagfcmplot(Data,U,P,Obj_Fcn);endm 文件 2/7:function U,P,Dist,Cluster_Res,Obj_Fcn,iter=fuzzycm2(Data,P0,plotfla

6、g,M,epsm)% 模糊 C 均值聚類 FCM: 從指定初始聚類中心開始迭代% U,P,Dist,Cluster_Res,Obj_Fcn,iter = fuzzycm2(Data,P0,plotflag,M,epsm)% 輸入 : Data,plotflag,M,epsm: 見 fuzzycm.m% P0: 初始聚類中心% 輸出 : U,P,Dist,Cluster_Res,Obj_Fcn,iter: 見 fuzzycm.m% See also: fuzzycmif nargin<5epsm=1.0e-6;endif nargin<4M=2;endif nargin<3pl

7、otflag=0;endN,S = size(Data); m = 2/(M-1); iter = 0;C=size(P0,1);Dist(C,N)=0;U(C,N)=0;P(C,S)=0;% FCM 的迭代算法while true% 迭代計數(shù)器iter=iter+1;% 計算或更新劃分矩陣Ufor i=1:Cfor j=1:NDist(i,j)=fuzzydist(P0(i,:),Data(j,:);endendU=1./(Dist.m.*(ones(C,1)*sum(Dist.(-m);% 更新聚類中心 P Um=U.M; P=Um*Data./(ones(S,1)*sum(Um'

8、)'% 目標(biāo)函數(shù)值 : 類內(nèi)加權(quán)平方誤差和if nargout>4 | plotflagObj_Fcn(iter)=sum(sum(Um.*Dist.2);end% FCM 算法迭代停止條件if norm(P-P0,Inf)<epsmbreakendP0=P;end% 聚類結(jié)果if nargout > 3res = maxrowf(U);for c = 1:Cv = find(res=c);Cluster_Res(c,1:length(v)=v;endend% 繪圖if plotflagfcmplot(Data,U,P,Obj_Fcn);endm 文件 3/7:fun

9、ction fcmplot(Data,U,P,Obj_Fcn)% FCM 結(jié)果繪圖函數(shù)% See also: fuzzycm maxrowf ellipse C,S = size(P); res = maxrowf(U);str = 'po*x+dv><.h'% 目標(biāo)函數(shù)繪圖figure(1),plot(Obj_Fcn)title(' 目標(biāo)函數(shù)值變化曲線','fontsize',8)%2D 繪圖if S=2figure(2),plot(P(:,1),P(:,2),'rs'),hold onfor i=1:Cv=Data

10、(find(res=i),:);plot(v(:,1),v(:,2),str(rem(i,12)+1)ellipse(max(v(:,1)-min(v(:,1), .max(v(:,2)-min(v(:,2), .max(v(:,1)+min(v(:,1), .max(v(:,2)+min(v(:,2)/2,'r:')endgrid on,title('2D聚類結(jié)果圖 ','fontsize',8),hold offend%3D 繪圖if S>2figure(2),plot3(P(:,1),P(:,2),P(:,3),'rs'

11、;),hold onfor i=1:Cv=Data(find(res=i),:);plot3(v(:,1),v(:,2),v(:,3),str(rem(i,12)+1)ellipse(max(v(:,1)-min(v(:,1), .max(v(:,2)-min(v(:,2), .max(v(:,1)+min(v(:,1), .max(v(:,2)+min(v(:,2)/2, .'r:',(max(v(:,3)+min(v(:,3)/2)endgrid on,title('3D聚類結(jié)果圖 ','fontsize',8),hold offendm 文

12、件 4/7:function D=fuzzydist(A,B)% 模糊聚類分析 : 樣本間的距離% D = fuzzydist(A,B)D=norm(A-B);m 文件 5/7:function mr=maxrowf(U,c)% 求矩陣 U 每列第 c 大元素所在行 ,c 的缺省值為 1% 調(diào)用格式 : mr = maxrowf(U,c)% See also: addrif nargin<2c=1;endN=size(U,2);mr(1,N)=0;for j=1:Naj=addr(U(:,j),'descend');mr(j)=aj(c);endm 文件 6/7:func

13、tion ellipse(a,b,center,style,c_3d)% 繪制一個橢圓% 調(diào)用 : ellipse(a,b,center,style,c_3d)% 輸入 :% a: 橢圓的軸長 (平行于 x 軸 )% b: 橢圓的軸長 (平行于 y 軸 )% center: 橢圓的中心 x0,y0, 缺省值為 0,0% style: 繪制的線型和顏色 ,缺省值為實線藍(lán)色%c_3d:橢圓的中心在3D 空間中的z 軸坐標(biāo) ,可缺省if nargin<4style='b'endif nargin<3 | isempty(center)center=0,0;endt=1:3

14、60;x=a/2*cosd(t)+center(1);y=b/2*sind(t)+center(2);if nargin>4plot3(x,y,ones(1,360)*c_3d,style)elseplot(x,y,style)endm 文件 7/7:function f = addr(a,strsort)% 返回向量升序或降序排列后各分量在原始向量中的索引% 函數(shù)調(diào)用 :f = addr(a,strsort)% strsort: 'ascend' or 'descend'%default is 'ascend'% - example -%

15、 addr( 4 5 1 2 ) returns ans:%3412if nargin=1strsort='ascend'endsa=sort(a); ca=a;la=length(a);f(la)=0;for i=1:laf(i)=find(ca=sa(i),1);ca(f(i)=NaN;endif strcmp(strsort,'descend')f=fliplr(f);end幾天前我還在這里發(fā)帖求助, 可是很幸運在其他地方找到了, 在這里和大家分享一下!function center, U, obj_fcn = FCMClust(data, cluster

16、_n, options)% FCMClust.m采用模糊 C 均值對數(shù)據(jù)集 data 聚為 cluster_n 類% 用法:% 1.center,U,obj_fcn = FCMClust(Data,N_cluster,options);% 2.center,U,obj_fcn = FCMClust(Data,N_cluster);% 輸入:%data- nxm 矩陣 , 表示 n 個樣本 , 每個樣本具有 m的維特征值%N_cluster- 標(biāo)量 , 表示聚合中心數(shù)目 , 即類別數(shù)%options- 4x1矩陣,其中%options(1):隸 屬度矩 陣U的指數(shù), >1( 缺省值 : 2

17、.0)%options(2):最大迭代次數(shù)( 缺省值 : 100)%options(3):隸屬度最小變化量,迭代終止條件( 缺省值 : 1e-5)%options(4):每次迭代是否輸出信息標(biāo)志( 缺省值:1)% 輸出:%center-聚類中心%U- 隸屬度矩陣%obj_fcn-目標(biāo)函數(shù)值% Example:%data = rand(100,2);%center,U,obj_fcn = FCMClust(data,2);%plot(data(:,1), data(:,2),'o');%hold on;%maxU = max(U);%index1 = find(U(1,:) =

18、maxU);%index2 = find(U(2,:) = maxU);%line(data(index1,1),data(index1,2),'marker','*','color','g');%line(data(index2,1),data(index2,2),'marker','*','color','r');%plot(center(1 2,1),center(1 2,2),'*','color','k')%h

19、old off;if nargin = 2 & nargin = 3,%判斷輸入?yún)?shù)個數(shù)只能是2 個或 3 個error('Too many or too few input arguments!');enddata_n = size(data, 1); % in_n = size(data, 2);求出 data 的第一維 (rows) 數(shù) , 即樣本個數(shù)% 求出 data 的第二維 (columns) 數(shù),即特征值長度% 默認(rèn)操作參數(shù)default_options = 2;100;1e-5;1;% 隸屬度矩陣 U 的指數(shù)% 最大迭代次數(shù)% 隸屬度最小變化量 , 迭代

20、終止條件% 每次迭代是否輸出信息標(biāo)志if nargin = 2,options = default_options;else%分析有 options做參數(shù)時候的情況% 如果輸入?yún)?shù)個數(shù)是二那么就調(diào)用默認(rèn)的 option;if length(options) < 4, %如果用戶給的 opition數(shù)少于 4 個那么其他用默認(rèn)值 ;tmp = default_options;tmp(1:length(options) = options;options = tmp;end% 返回 options 中是數(shù)的值為 0( 如 NaN),不是數(shù)時為 1 nan_index = find(isnan(options)=1);%將 denfault_options中對應(yīng)位置的參數(shù)賦值給options 中不是數(shù)的位置 .options(nan_index) = default_options(nan_index);if options(1) <= 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論