資源描述:
《matlab(K均值)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、K-均值算法MATLAB作業(yè)——K-均值算法本題模式樣本共有10個,聚類數(shù)目K取為3。在該MATLAB實現(xiàn)的算法中,本算法使用cell變成單元數(shù)據(jù)進行初始化和聚類保存,選擇該樣本集中的前3個樣本作為初始聚類中心,按照最小距離原則將樣本分配到各個聚類中,計算新的聚類中心,與之前的聚類中心比較。若不同則繼續(xù)迭代,若相同則算法收斂,停止計算,得到聚類中心和聚類結(jié)果見附圖。程序:X=input('請輸入樣本數(shù)據(jù)矩陣:');m=size(X,1);n=size(X,2);counter=0;k=input('請輸入聚類數(shù)目:');whilek>mdisp('您輸入的聚類數(shù)目
2、過大,請輸入正確的k值');k=input('請輸入聚類數(shù)目:');endifk==1disp('聚類數(shù)目不能為1,請輸入正確的k值');k=input('請輸入聚類數(shù)目:');end%產(chǎn)生k個零矩陣,M用來存放聚類中心M=cell(1,m);fori=1:kM{1,i}=zeros(1,n);endMold=cell(1,m);fori=1:kMold{1,i}=zeros(1,n);10K-均值算法MATLABend%選擇模式樣本數(shù)據(jù)的前K個樣本作為初始聚類中心fori=1:kM{1,i}=X(i,:);endwhiletruecounter=counter+
3、1;disp('第');disp(counter);disp('次迭代');count=zeros(1,k);%初始化聚類CC=cell(1,k);fori=1:kC{1,i}=zeros(m,n);end%聚類,按照最短距離原則將其余樣本分配到聚類中心中的某一個fori=1:mgap=zeros(1,k);ford=1:kforj=1:ngap(d)=gap(d)+(M{1,d}(j)-X(i,j))^2;endend[y,l]=min(sqrt(gap));count(l)=count(l)+1;C{1,l}(count(l),:)=X(i,:);10K-均值
4、算法MATLABendMold=M;disp('聚類中心為:');fori=1:kdisp(M{1,i})enddisp('聚類結(jié)果為:');fori=1:kdisp(C{1,i});endsumvar=0;fori=1:kE=0;%求單個誤差平方和為Eforj=1:count(i)forh=1:nE=E+(M{1,i}(h)-C{1,i}(j,h))^2;endendsumvar=sumvar+E;end%求總體誤差平方和為sumvar%計算新的聚類中心,更新M,并保存舊的聚類中心fori=1:kM{1,i}=sum(C{1,i})/count(i);end%比
5、較前后兩次聚類中心是否變化,若變化則繼續(xù)迭代;否則算法收斂,停止計算;10K-均值算法MATLABtally=0;fori=1:kifabs(Mold{1,i}-M{1,i})<1e-5*ones(1,n)tally=tally+1;continue;elsebreak;endendiftally==kbreak;endendplot(X(:,1),X(:,2),'b*');axis([010010]);%輸出聚類結(jié)果figure(1)holdon;P=[M{1,1};M{1,2};M{1,3}];plot(P(:,1),P(:,2),'r*');legend('
6、樣本點','聚類中心');%作圖,在坐標軸上畫出模式樣本點和聚類中心點結(jié)果:>>Untitled7請輸入樣本數(shù)據(jù)矩陣:[00;38;22;11;53;48;63;54;64;75]請輸入聚類數(shù)目:310K-均值算法MATLAB第1次迭代聚類中心為:003822聚類結(jié)果為:001100000000000000003848750010K-均值算法MATLAB00000000000022536354640000000000第2次迭代聚類中心為:0.50000.50004.66677.000010K-均值算法MATLAB4.80003.2000聚類結(jié)果為:00221100
7、00000000000038480000000000000000536310K-均值算法MATLAB5464750000000000第3次迭代聚類中心為:113.50008.00005.80003.8000聚類結(jié)果為:00221100000010K-均值算法MATLAB000000003848000000000000000053635464750000000000>>10K-均值算法MATLAB10