目前已知matlab的聚類方法有三種:
一、利用 clusterdata函數對樣本數據進行一次聚類,其缺點為可供用戶選擇的面較窄,不能更改距離的計算方法;
二、層次聚類,該方法較為靈活,需要進行細節了解聚類原理,具體需要進行如下過程處理:
(1)找到數據集合中變量兩兩之間的相似性和非相似性,用pdist函數計算變量之間的距離;
(2)用 linkage函數定義變量之間的連接;
(3)用 cophenetic函數評價聚類信息;
(4)用cluster函數創建聚類。
三、划分聚類,包括K均值聚類和K中心聚類,同樣需要系列步驟完成該過程,要求使用者對聚類原理和過程有較清晰的認識。
1.Matlab中相關函數介紹
1.1 pdist函數
調用格式:Y=pdist(X,’metric’)
說明:用 ‘metric’指定的方法計算 X 數據矩陣中對象之間的距離。
X:一個m×n的矩陣,它是由m個對象組成的數據集,每個對象的大小為n。
metric’取值如下:
‘euclidean’:歐氏距離(默認);
‘seuclidean’:標准化歐氏距離;
‘mahalanobis’:馬氏距離;
‘cityblock’:布洛克距離;
‘minkowski’:明可夫斯基距離;
‘cosine’:余弦
‘correlation’:相關系數
‘hamming’:漢明距離
‘jaccard’:jaccard相似性系數
‘chebychev’:Chebychev距離。
Y:輸出,m個對象中兩兩之間的距離,為一個行向量,長度為。
1.2 squareform函數
調用格式:Z=squareform(Y,..)
說明: 強制將距離矩陣從轉化為對角線元素全是零且對稱的方陣形式,或從對角線元素全是零且對稱的方陣形式轉化為一個行向量。
1.3 linkage函數
調用格式:Z=linkage(Y,’method’)
說 明:用‘method’參數指定的算法計算系統聚類樹。
Y:pdist函數返回的距離向量;
'method':可取值如下:
‘single’:最短距離法(默認);
‘complete’:最長距離法;
‘average’:未加權平均距離法;
‘weighted’: 加權平均法;
‘centroid’: 質心距離法;
‘median’:加權質心距離法;
‘ward’:內平方距離法(最小方差算法)
返回:Z為一個包含聚類樹信息的(m-1)×3的矩陣。
Z=linkage(Y)
Z =
3.0000 4.0000 0.2228
2.0000 5.0000 0.5401
1.0000 7.0000 1.0267
6.0000 9.0000 1.0581
8.0000 10.0000 1.3717
Z數組的前兩列是索引下標列,最后一列是距離列。例如上例中表示在產生聚類樹的計算過程中,第3和第4點先聚成一類,他們之間的距離是0.2228,以此類推。要注意的是,為了標記每一個節點,需要給新產生的聚類也安排一個標識,MATLAB中會將新產生的聚類依次用m+1,m+2,....依次來標識。比如第3和第4點聚成的類以后就用7來標識,第2和第5點聚成的類用8來標識,依次類推。
通過linkage函數計算之后,實際上二叉樹式的聚類已經完成了。只是這個數據數組不大好看,可以用dendrogram(Z)來可視化聚類樹。
1.4 dendrogram函數
調用格式:[H,T,…]=dendrogram(Z,p,…)
說明:生成只有頂部p個節點的冰柱圖(譜系圖)。
1.5 cophenet函數
調用格式:c=cophenetic(Z,Y)
說明:利用pdist函數生成的Y和linkage函數生成的Z計算cophenet相關系數。
1.6 cluster 函數
調用格式:T=cluster(Z,…)
說明:根據linkage函數的輸出Z 創建分類。
1.7 clusterdata函數
調用格式有兩種:1)T=clusterdata(X,cutoff);
2)T=clusterdata(X,param1,val1,param2,val2,...)
說明:根據數據創建分類。
1)T=clusterdata(X,cutoff);
當0<cutoff<2時,T=clusterdata(X,cutoff)與下面的一組命令等價:
Y=pdist(X,’euclid’);
Z=linkage(Y,’single’);
T=cluster(Z,'cutoff',cutoff);
當cutoff是個不小於2的整數時,T=clusterdata(X,cutoff)與下面的一組命令等價:
Y=pdist(X,’euclid’);
Z=linkage(Y,’single’);
T=cluster(Z,'maxclust',cutoff);
2)T=clusterdata(X,param1,val1,param2,val2,...)的選擇空間更大些,參數參照如下表:
2. Matlab程序
2.1 一次聚類法
X=[11978 12.5 93.5 31908;…;57500 67.6 238.0 15900];
T=clusterdata(X,0.9)
2.2 分步聚類(二三均適用其流程)
Step1 尋找變量之間的相似性
用pdist函數計算相似矩陣,有多種方法可以計算距離,進行計算之前最好先將數據用zscore函數進行標准化。
X2=zscore(X); %標准化數據
Y2=pdist(X2); %計算距離
Step2 定義變量之間的連接
Z2=linkage(Y2);
Step3 評價聚類信息
C2=cophenet(Z2,Y2); //0.94698
Step4 創建聚類,並作出譜系圖
T=cluster(Z2,6);
H=dendrogram(Z2);