資源描述:
《k均值算法 編程實(shí)驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、模式識(shí)別報(bào)告實(shí)驗(yàn)2學(xué)生姓名:劉凱班學(xué)號(hào):075114指導(dǎo)老師:馬麗實(shí)驗(yàn)二:運(yùn)用Kmean算法對(duì)無分類數(shù)據(jù)進(jìn)行分類一、核心算法描述:本算法可以放在一個(gè)函數(shù)中,此函數(shù)形參為待分類的點(diǎn)集P(5*N矩陣)和類別數(shù)k,返回值為已分類的點(diǎn)集Classified_P(5*N矩陣)。1.在0到N(所有點(diǎn)數(shù))之間任取k個(gè)值;2.創(chuàng)建類心點(diǎn)集Z(4*k矩陣),依次把k個(gè)值對(duì)應(yīng)的點(diǎn)的前四行信息賦給Z,這樣Z就存儲(chǔ)了k個(gè)類心的信息;3.計(jì)算距離:采用k*N矩陣D存儲(chǔ)P中每一點(diǎn)到各個(gè)類心的距離,此距離用公式可以表示為,D(i,j)=((P(1,j)-Z(1,i))^2+(P(2
2、,j)-Z(2,i))^2+(P(3,j)-Z(3,i))^2+(P(4,j)-Z(4,i))^2)^(1/2);4.分類:用k*N矩陣CL存放分類信息,CL初始值設(shè)為零,在D中逐列求最小值并記錄其行號(hào)r,設(shè)當(dāng)前屬于c列,則r就是c點(diǎn)的類別號(hào),將c填入CL(r,c)中,將r寫進(jìn)P(5,c)表征第c點(diǎn)屬于r類;5.根據(jù)CL中的信息,檢索每一行,求出所有非零列的平均坐標(biāo)值并記錄其列數(shù)m,具體的,逐行掃描,發(fā)現(xiàn)非零元素時(shí)就使m+1,同時(shí)根據(jù)當(dāng)前CL中的非零值作為列號(hào)去索引P中對(duì)應(yīng)的點(diǎn),將其前四行信息分別分開累加,最后CL每一行的總和再除以m即得到新坐標(biāo)。6.
3、判斷新坐標(biāo)與舊的類心坐標(biāo)是否完全一致,若一致則分類完畢;否則需更新Z,然后再依次更新D、CL、P;7.重復(fù)5,6過程,直到新類心與舊類心完全一致或者設(shè)置迭代次數(shù)repeat的值以完成分類;8.將P賦給Classified_P.源程序:1.待調(diào)用函數(shù):function[Z,CL,Classified_P]=Kmean(P,k)%參數(shù)說明:P為5*N矩陣,每一列對(duì)應(yīng)一個(gè)點(diǎn)的兩個(gè)波段值及所屬類別號(hào)%k為Kmean算法參數(shù)%Z為4行k列矩陣,存放k個(gè)類心坐標(biāo)%CL為k*N矩陣,作為分類后的分類矩陣,每一行代表一個(gè)類別%每一元素值就是該點(diǎn)對(duì)應(yīng)序號(hào)%這樣通過CL矩
4、陣可以方便的看到每一類中有哪些%序號(hào)的點(diǎn)%Classified_P為5*N矩陣,在P的基礎(chǔ)上多加了每一點(diǎn)實(shí)際的類別號(hào)%存放在對(duì)應(yīng)列的第5行Z1=zeros(1,k);N=length(P);%取第一行長度N,即所有點(diǎn)數(shù)%實(shí)際上這個(gè)地方length(P(1,:))也是可以的,%因?yàn)楸竞瘮?shù)本來就是只返回總列數(shù)q=N*rand(1,10*k);%產(chǎn)生10k個(gè)0到N之間的隨機(jī)數(shù)L=0;fori=1:10*kC=ceil(q(i));%取整的1到N之間的自然數(shù)temp=0;%每次選一個(gè)點(diǎn),對(duì)其初始化forj=1:kifC==Z1(j)temp=temp+1;%用
5、temp的值來表示所選點(diǎn)序號(hào)是重復(fù)次數(shù)endendiftemp==0%表明沒有重復(fù)L=L+1;ifL>=1&L<=kZ1(1,L)=C;%用Z1矩陣存放初始k個(gè)類心序號(hào)endendifL>=kbreak;%提前結(jié)束循環(huán)endend%至此已得到k個(gè)類心序號(hào)Z=zeros(4,k);%用來存放k個(gè)類心的坐標(biāo)fori=1:kifZ1(i)>0forj=1:4Z(j,i)=P(j,Z1(i));%以在Z1矩陣元素的值作為序號(hào)去索引end%P中對(duì)應(yīng)的點(diǎn)endendd=zeros(1,4);%用于計(jì)算距離時(shí)存放各維差的平方值D=zeros(k,N);%作為距離矩陣
6、,D用來存放所有點(diǎn)到每一個(gè)類心距離fori=1:kforj=1:Nforh=1:4d(h)=(P(h,j)-Z(h,i))^2;endD(i,j)=(sum(d,2))^(1/2);%第j點(diǎn)到i類心距離endend%歸類CL=zeros(k,N);%分類矩陣,每一行作為一類%元素值就是對(duì)應(yīng)點(diǎn)的序號(hào)%%如2行4列為4,表明序號(hào)4的點(diǎn)屬于2類%fori=1:N%%[a,b]=min(D(:,i));%a為i列最小值,b為其行序號(hào)%%CL(b,i)=i;%把i點(diǎn)序號(hào)i填入CL矩陣對(duì)應(yīng)類別中%P(5,i)=b;%把i點(diǎn)對(duì)應(yīng)類別號(hào)填入P中i列第5行%%end%以
7、下這段代碼作用完全等同于上7行fori=1:NT=0;forj=1:kifD(j,i)==min(D(:,i))T=T+1;%避免重復(fù)CL(j,i)=i;%把的序號(hào)填入CL矩陣對(duì)應(yīng)類別中P(5,i)=j;%把i點(diǎn)對(duì)應(yīng)類別號(hào)填入P中i列第三行endifT==1break;%避免重復(fù)endendendClassified_P=P;tag=0;repeat=100;%設(shè)置迭代次數(shù)上限whiletag0%只有大于零的元素值
8、才是%對(duì)應(yīng)于P矩陣中的點(diǎn)的序號(hào)m=m+1;%標(biāo)識(shí)每一類中實(shí)際點(diǎn)數(shù)forh=1:4Coordin