資源簡(jiǎn)介
ISODATA算法的實(shí)現(xiàn),使用matlab編程,聚類文件為男女身高和體重,最后結(jié)果聚類為兩類,一類男,一類女

代碼片段和文件信息
function?group=ISODATA(kleastNumclassStandardminDismaxCombineiterationTime)
%ISODATA聚類算法
%k預(yù)期的聚類中心數(shù)目
%leastNum每一聚類域中最少的樣本數(shù)目
%classStandard一個(gè)聚類域中樣本距離分布的標(biāo)準(zhǔn)差
%minDis兩個(gè)聚類中心間的最小距離
%maxCombine在一次迭代運(yùn)算中可以合并的聚類中心的最多對(duì)數(shù)
%iterationTime迭代運(yùn)算的次數(shù)
person=load(‘sample.txt‘‘height‘‘weight‘);%從文本文件讀入數(shù)據(jù)放入person結(jié)構(gòu)體中
num=size(person1);%獲得person結(jié)構(gòu)體大小
currentNum=1;%當(dāng)前聚類中心的數(shù)目即當(dāng)前分類的數(shù)目
centre=person(1:);%初始聚類中心
%?centre(2:)=person(50:);
%?centre(3:)=person(100:);
%?centre(4:)=person(150:);
factor?=?0.5;???%分裂計(jì)算時(shí)標(biāo)準(zhǔn)差的乘積因子
distance=ComputDistance(personcentrenumcurrentNum);%計(jì)算每個(gè)樣本跟各類中心的距離
I=1;
while?I<=iterationTime????
????class=cell(currentNum);
????for?i=1:num
????????[valueindex]=min(distance(i:));?%找到每個(gè)樣本距離哪個(gè)類最近
????????dtemp=[i];
????????class{index}=[class{index}dtemp];??%將該樣本劃分到距離最近的類中
????end
????
????%若某類樣本數(shù)小于每類最少樣本數(shù)則取消該分類
????for?i=1:currentNum
????????if?size(class{i}2) ????????????class=move(classi);
????????????currentNum=currentNum-1;
????????end
????end
????centre=ComputMid(personclasscurrentNum);%重新計(jì)算各類中心點(diǎn)
????distance=ComputDistance(personcentrenumcurrentNum);%重新計(jì)算各樣本與各類的距離??
????classAverage=ComputAverageClass(classdistancecurrentNum);%計(jì)算各聚類域Sj中模式樣本與各聚類中心間的平均距離classAverage
????totalAverage=ComputAverageTotal(classclassAveragecurrentNumnum);%計(jì)算全部模式樣本和其對(duì)應(yīng)聚類中心的總平均距離totalAverage
????flag=step_judge(currentNumIiterationTimek);
????
????if?flag==1%分裂處理
????????Cstandard=ComputCstandard(classpersoncentrecurrentNum);%計(jì)算每個(gè)聚類中樣本距離的標(biāo)準(zhǔn)差向量Cstandard
????????for?i=1:currentNum
????????????[valueindex]=max(Cstandard(i:));
????????????maxCstandard(i)=value;
????????????if?maxCstandard(i)>classStandard
????????????????if?(classAverage(i)>totalAverage?&&?size(class{i}2)>2*(leastNum+1))||currentNum<=k/2%樣本總數(shù)超過(guò)規(guī)定值一倍以上,分裂聚類中心
????????????????????lcentre=centre(i:)-factor*maxCstandard(i);
????????????????????hcentre=centre(i:)+factor*maxCstandard(i);?
????????????????????temp=centre((i+1):currentNum:);
????????????????????currentNum=currentNum+1;
????????????????????centre(i:)=lcentre;
????????????????????centre(i+1:)=hcentre;
????????????????????centre((i+2):currentNum:)=temp;??????????????????
????????????????end
????????????end
????????end
????
????elseif?flag==0?%合并處理
????????if?I==iterationTime?%最后一次迭代
????????????minDis=0;
????????end
????????centreDis=ComputCentreDistance(centrecurrentNum);%計(jì)算全部聚類中心的距離centreDis
????????[indrow?indcol]?=?find(centreDis ????????[indrow?indcol]=selectsort(centreDisindrowindcol);
????????for?i=1:size(indrow1)????????????
????????????if?i<=maxCombine
????????????????lengthI=size(class{indrow(i)}2);
????????????????lengthJ=size(class{indcol(i)}2);
????????????????tempCentre(i:)=(1/(lengthI+lengthJ))*(lengthI*centre(indrow(i):)+lengthJ*centre(indcol(i):));
????????????????if?indrow(i) ????????????????????centre(indrow(i):)=tempCentre(i:);
????????????????????temp=centre((i
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????6998??2011-06-04?16:56??ISODATA\sample.txt
?????文件???????7627??2011-03-27?11:11??ISODATA\ISODATA.m
?????目錄??????????0??2011-06-04?16:57??ISODATA
-----------?---------??----------?-----??----
????????????????14625????????????????????3
- 上一篇:MNF算法流程
- 下一篇:PCA-SIFT 源代碼 matlab
評(píng)論
共有 條評(píng)論