對數(shù)據(jù)進行聚類分析實驗報告.doc
對數(shù)據(jù)進行聚類分析實驗報告1. 方法背景聚類分析又稱群分析,是多元統(tǒng)計分析中研究樣本或指標的一種主要的分類方法,在古老的分類學中,人們主要靠經(jīng)驗和專業(yè)知識,很少利用數(shù)學方法。隨著生產(chǎn)技術(shù)和科學的發(fā)展,分類越來越細,以致有時僅憑經(jīng)驗和專業(yè)知識還不能進行確切分類,于是數(shù)學這個有用的工具逐漸被引進到分類學中,形成了數(shù)值分類學。近些年來,數(shù)理統(tǒng)計的多元分析方法有了迅速的發(fā)展,多元分析的技術(shù)自然被引用到分類學中,于是從數(shù)值分類學中逐漸的分離出聚類分析這個新的分支。結(jié)合了更為強大的數(shù)學工具的聚類分析方法已經(jīng)越來越多應用到經(jīng)濟分析和社會工作分析中。在經(jīng)濟領(lǐng)域中,主要是根據(jù)影響國家、地區(qū)及至單個企業(yè)的經(jīng)濟效益、發(fā)展水平的各項指標進行聚類分析,然后很據(jù)分析結(jié)果進行綜合評價,以便得出科學的結(jié)論。2. 基本要求用FAMALE.TXT、MALE.TXT和/或test2.txt的數(shù)據(jù)作為本次實驗使用的樣本集,利用C均值和分級聚類方法對樣本集進行聚類分析,對結(jié)果進行分析,從而加深對所學內(nèi)容的理解和感性認識。3. 實驗要求(1)把FAMALE.TXT和MALE.TXT兩個文件合并成一個,同時采用身高和體重數(shù)據(jù)作為特征,設類別數(shù)為2,利用C均值聚類方法對數(shù)據(jù)進行聚類,并將聚類結(jié)果表示在二維平面上。嘗試不同初始值對此數(shù)據(jù)集是否會造成不同的結(jié)果。(2)對1中的數(shù)據(jù)利用C均值聚類方法分別進行兩類、三類、四類、五類聚類,畫出聚類指標與類別數(shù)之間的關(guān)系曲線,探討是否可以確定出合理的類別數(shù)目。(3)對1中的數(shù)據(jù)利用分級聚類方法進行聚類,分析聚類結(jié)果,體會分級聚類方法。(4)利用test2.txt數(shù)據(jù)或者把test2.txt的數(shù)據(jù)與上述1中的數(shù)據(jù)合并在一起,重復上述實驗,考察結(jié)果是否有變化,對觀察到的現(xiàn)象進行分析,寫出體會4. 實驗步驟及流程圖根據(jù)以上實驗要求,本次試驗我們將分為兩組:一、首先對FEMALE 與MALE中數(shù)據(jù)組成的樣本按照上面要求用C均值法進行聚類分析,然后對FEMALE、MALE、test2中數(shù)據(jù)組成的樣本集用C均值法進行聚類分析,比較二者結(jié)果。二、將上述兩個樣本用分即聚類方法進行聚類,觀察聚類結(jié)果。并將兩種聚類結(jié)果進行比較。(1)、C均值算法思想C均值算法首先取定C個類別和選取C個初始聚類中心,按最小距離原則將各模式分配到C類中的某一類,之后不斷地計算類心和調(diào)整各模式的類別,最終使各模式到其判屬類別中心的距離平方之和最小(2)、實驗步驟第一步:確定類別數(shù)C,并選擇C個初始聚類中心。本次試驗,我們分別將C的值取為2和3。用的是憑經(jīng)驗選擇代表點的方法。比如:在樣本數(shù)為N時,分為兩類時,取第1個點和第個點作為代表點;分為三類時,取第1、個點作為代表點;第二步:將待聚類的樣本集中的樣本逐個按最小距離規(guī)則分劃給C個類中的某一類。第三步:計算重新聚類后的個各類心,即各類的均值向量。第四步:如果重新得到的類別的類心與上一次迭代的類心相等,則結(jié)束迭代,否則轉(zhuǎn)至第二步。第五步:迭代結(jié)束時,換不同的初始值進行試驗,將實驗結(jié)果進行比較(3)、實驗流程圖(4)、本次試驗我們用的聚類指標是誤差平方和聚類準則Je設是第聚類的樣本數(shù)目,是這些樣本的均值,則把中得各樣本與均值間的誤差平方和對所有類相加后為:當C取不同的值時各自算出它們的,進行比較。5. 心得體會通過本次試驗,我們隊C均值聚類法以及分級聚類法都有了較好的理解,并且在用MATLAB編程方面都有了很大進步。部分代碼:%C=2clc;clear all;FH FW=textread(C:UsersxuydDesktophomeworkFEMALE.txt,%f %f);MH MW=textread(C:UsersxuydDesktophomeworkMALE.txt,%f %f);FA=FH FW;FA=FA;MA=MH MW;MA=MA;for k=1:50 NT(:,k)=FA(:,k);end for k=51:100 NT(:,k)=MA(:,k-50); end z1=NT(:,1);z2=NT(:,51); for k=1:100 a=z1,b=z2 G1=zeros(2,100);G2=zeros(2,100); for i=1:100 d1=sqrt(NT(1,i)-z1(1,1)2+(NT(2,i)-z1(2,1)2); d2=sqrt(NT(1,i)-z2(1,1)2+(NT(2,i)-z2(2,1)2); if d1<d2 G1(:,i)=NT(:,i); else G2(:,i)=NT(:,i); end end G1(:,find(sum(abs(G1),1)=0)=; G2(:,find(sum(abs(G2),1)=0)=; z1=mean(G1,2); z2=mean(G2,2); if isequal(a,z1)=1&&isequal(z2,b)=1 break end end z1,z2,G1,G2,size(G1,2),size(G2,2) for i=1:size(G1,2) x=G1(1,i); y=G1(2,i); plot(x,y,G.); hold on end for i=1:size(G2,2) x=G2(1,i); y=G2(2,i); plot(x,y,R*); hold on endplot(z1(1,1),z1(2,1),B+)hold onplot(z2(1,1),z2(2,1),B+)hold on