matlab 聚類


目前已知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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM