1. 程式人生 > >聚類分析的Matlab 程式—系統聚類(附有案例分析)

聚類分析的Matlab 程式—系統聚類(附有案例分析)

聚類分析的Matlab 程式—系統聚類

(1)計算資料集每對元素之間的距離,對應函式為pdistw.

呼叫格式:Y=pdist(X),Y=pdist(X,’metric’), Y=pdist(X,’distfun’),Y=pdist(X,’minkowski’,p)

說明:X是m*n的矩陣,metric是計算距離的方法選項:

metric=euclidean表示歐式距離(預設值);

metric=seuclidean表示標準的歐式距離;

metric=mahalanobis表示馬氏距離。

distfun是自定義的距離函式,p是minkowski距離計算過程中的冪次,預設值為2.Y返回大小為m(m-1)/2的距離矩陣,距離排序順序為(1,2),(1,3),…(m-1,m),Y也稱為相似矩陣,可用squareform將其轉化為方陣。

(2)對元素進行分類,構成一個系統聚類樹,對應函式為linkage.

呼叫格式:Z=linkage(Y), Z=linkage(Y,’method’)

說明:Y是距離函式,Z是返回系統聚類樹,method是採用的演算法選項,

如下:method=single表示最短距離(預設值);

complete表示最長距離;median表示中間距離法;

centroid表示重心法;average表示類平均法;

ward 表示離差平方和法(Ward法)。

(3)確定怎樣劃分系統聚類樹,得到不同的類,對應的函式為cluster.

呼叫格式:T=cluster(Z,’cutoff’,c),T=cluster(Z,’maxclust’,n)

說明:Z是系統聚類樹,為(m-1)*3的矩陣,c是閾值,n是類的最大數目,

maxclust是聚類的選項,cutoff是臨界值,決定cluster函式怎樣聚類。

例題1 利用系統聚類法對5個變數進行分類。

matlab程式

%Matlab執行程式:
X=[20,7;18,10;10,5;4,5;4,3];
Y=pdist(X);
SF=squareform(Y);
Z=linkage(Y,’single’);
dendrogram(Z);%顯示系統聚類樹
T=cluster(Z,'maxclust',3)

例題2

%例2的程式設計:
X=[1 1;1 2;6 3;8 2;8 0];
Y=pdist(X);
SF=squareform(Y);
Z=linkage(Y,'single');
dendrogram(Z);
T=cluster(Z,'maxclust',3)

聚類分析案例

    根據第三產業國內生產總值的9 項指標,對華東地區6 省1 市進行分類,原始資料如下表:

 

%Matlab程式如下:
X=[244.42    412.04   459.63    512.21  160.45    43.51     89.93    48.55   48.63
435.77    724.85   376.04    381.81  210.39    71.82   150.64     23.74  188.28
321.75    665.80   157.94    172.19  147.16    52.44     78.16     10.90    93.50                                                                       
152.29    258.60     83.42      85.10    75.74    26.75     63.47       5.89    47.02                                                                
347.25    332.59   157.32    172.48  115.16    33.80     77.27       8.69    79.01                                                                    
145.40    143.54     97.40    100.50    43.28    17.71     51.03       5.41    62.03                                                                  
442.20    665.33    411.89   429.88   115.07   87.45   145.25     21.39  187.77 ]';
Y=pdist(X);
SF=squareform(Y);
Z=linkage(Y,'average');
dendrogram(Z);
T=cluster(Z,'maxclust',3)