資源簡(jiǎn)介
本資源是ISODATA聚類算法的matlab代碼,其中包括isodata.m(ISODATA算法代碼,其中包括了合并分裂等一系列子函數(shù))、provaisodata.m(算法實(shí)例調(diào)用代碼)和dades.mat(存放實(shí)例數(shù)據(jù)變量的文件)三個(gè)文件,并且每個(gè)函數(shù)都有詳細(xì)的中文注釋,而非原來的西班牙語(yǔ)注釋。
ISODATA算法是在k-均值算法的基礎(chǔ)上,增加對(duì)聚類結(jié)果的“合并”和“分裂”兩個(gè)操作,并設(shè)定算法運(yùn)行控制參數(shù)的一種聚類算法。全稱:Iterative Selforganizing Data Analysis Techniques Algorithm 即:迭代自組織數(shù)據(jù)分析算法。
“合并”操作:當(dāng)聚類結(jié)果某一類中樣本數(shù)太少,或兩個(gè)類間的距離太近時(shí),進(jìn)行合并。“分裂”操作:
當(dāng)聚類結(jié)果某一類中樣本某個(gè)特征類內(nèi)方差太大,將該類進(jìn)行分裂。

代碼片段和文件信息
function?[Z?Xcluster?Ycluster?A?cluster]?=?isodata(X?Y?k?L?I?ON?OC?OS?NO?min);
?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??函數(shù)參數(shù)信息??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s=size(X);
s=s(2);
cluster=zeros(1s);?%?臨時(shí)空間的內(nèi)部檢查
iter=0;
final=0;
vuelve3=0;
A=1;?????%?初始化它的第一例
primeravez=1;???%?沒有要求的參數(shù)修改
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??1.初始化中心??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Z=?inicializa_centros(X?Y?A);
%%%%%%%%%%%%%%%%%%%%%%%%
%??主要方案??%
%%%%%%%%%%%%%%%%%%%%%%%%
while?final==0???%啟動(dòng)循環(huán)迭代。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??2.設(shè)置的參數(shù)值??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%???
????if?primeravez==0
if?vuelve3==0
????????????[Ltemp?Itemp?ktemp?ONtemp?OCtemp?OStemp]=parametros(L?I?k?ON?OC?OS?iter);
????????end;
????end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??3.計(jì)算和分配每個(gè)坐標(biāo)最近的(X,Y)??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
????primeravez=0;
vuelve3=1;
for?i=1:s
????????cluster(i)=cercano(X(i)?Y(i)?Z?A);
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??4.刪除群集??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%?函數(shù)可以減少我們(如果需要)的聚類中心數(shù)目和發(fā)現(xiàn)。
????[Z?A?cluster]=eliminar(A?cluster?Z?X?Y?ON);
????
????%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??5.更新群集中心??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Z=recalcula(cluster?X?Y?A?Z);
????
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??6.最后,分裂或合并??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
????if?(iter==I)
????????final=1;
????????next=0;
else
????????next=decide78(iter?k?A);
????end;
%%%%%%%%%%%%%%%
%??7.分裂??%
%%%%%%%%%%%%%%%
if?next==1
????????next=2;
????????hubo_division=0;
????????A2=A;
?? ????divide=0;
????????%?分散的集群,全局分散
????????%?Y的順序分別為最大分散組件變量y的分散。
????????
????????[Di?D?STM]=?dispersion(X?Y?Z?cluster?A);
????????%?滿足條件的各組進(jìn)行分裂
i=0;????%?按條件作出分裂和迭代。?????????????????????????
while?(hubo_division==0)?&?(i? ????i=i+1;??????????????????????????????????????????????????????????????????????????????????????
????index=find(cluster==i);?%?index顯示群集的值分區(qū)??????
????sindex=size(index);?????????????????????????????????????????????????????????????????????????
????sindex=sindex(2);???????????????????????????????????????????????????????????????????????????
????if??(STM(i)>OS)?&?(??((Di(i1)>D(1))?&?(Di(i2)>D(2))?&?(sindex>(2*(ON+1))))?|?(A<=(k/2))?)?
????????hubo_division=1;????????????????????????????????????????????????????????????????????????
????????next=1;?????????????????????????????????????????????????????????????????????????????????
????????[Z?cluster]=dividir(STM?A?cluster?Z?i?(A+1)?X?Y);????%?分裂.?????????????????
????????A=A+1;??%?表示一個(gè)新的分組。??????????????????????????????????????
????????iter=iter+1;??????????????????????????????????????????????????????????????????????
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????935??2010-04-18?22:45??provaisodata.m
?????文件???????4512??2004-06-15?16:22??dades.mat
?????文件??????16043??2010-04-19?11:11??isodata.m
-----------?---------??----------?-----??----
????????????????21490????????????????????3
評(píng)論
共有 條評(píng)論