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

代碼片段和文件信息
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);?%?臨時空間的內(nèi)部檢查
iter=0;
final=0;
vuelve3=0;
A=1;?????%?初始化它的第一例
primeravez=1;???%?沒有要求的參數(shù)修改
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%??1.初始化中心??%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Z=?inicializa_centros(X?Y?A);
%%%%%%%%%%%%%%%%%%%%%%%%
%??主要方案??%
%%%%%%%%%%%%%%%%%%%%%%%%
while?final==0???%啟動循環(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.計算和分配每個坐標(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);
????????%?滿足條件的各組進行分裂
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;??%?表示一個新的分組。??????????????????????????????????????
????????iter=iter+1;??????????????????????????????????????????????????????????????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????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
- 上一篇:matlab國歌演奏源代碼
- 下一篇:對腦電信號使用小波分解技術(shù)重建
評論
共有 條評論