1. 程式人生 > >MATLAB聚類分析(Cluster Analysis)

MATLAB聚類分析(Cluster Analysis)

使用環境:MATLAB2016a、MATLAB2010a

聚類分析是一種無監督式學習,不像迴歸分析等需要Inputs 和 Targets ,聚類分析是隻通過提供一組資料實現分類的演算法。下面給出本人在學習聚類分析的MATLAB程式

x1=5*[randn(500,1)+5,randn(500,1)+5];
x2=5*[randn(500,1)+5,randn(500,1)-5];
x3=5*[randn(500,1)-5,randn(500,1)+5];
x4=5*[randn(500,1)-5,randn(500,1)-5];
x5=5*[randn(500,1),randn(500,1)];
all=[x1;x2;x3;x4;x5];  %生成2500
*2的陣列 plot(x1(:,1),x1(:,2),'r.');hold on plot(x2(:,1),x2(:,2),'g.');... plot(x3(:,1),x3(:,2),'k.');... plot(x4(:,1),x4(:,2),'y.');... plot(x5(:,1),x5(:,2),'b.'); IDX=kmeans(all,5); %這裡用K-均值演算法 for k=1:2500 text(all(k,1),all(k,2),num2str(IDX(k))); end y=pdist(all); z=linkage(y); t=cluster(z,'cutoff'
,1.2); for k=1:2500 text(all(k,1),all(k,2),num2str(IDX(k))); end

kemaes函式介紹可以檢視幫助文件,這裡就不貼出來了。

執行結果如下:
這裡寫圖片描述

輸出的結果不是很好看,可以自己美化一下程式碼的。由結果可以看出輸入資料被分成了5份,即5簇。

根據這個思想可以設計一段學生成績分類的程式,假設A,B,C,D,E五位同學的成績如下:

Subjects A B C D E
MATH 78 85 97 90 78
ENGLISH 85 79 91 91 81
C PROGRAMING 89 88 89 94 80
HISTORY 74 71 96 89 83
CIRCUITS 78 80 86 94 76
PHYSICS 84 83 90 90 78
MATLAB 83 77 85 86 88
A=[78    85    89    74    78    84    83];
B=[85    79    88    71    80    83    77];
C=[97    91    89    96    86    90    85];
D=[90    91    94    89    94    90    86];
E=[78    81    80    83    76    78    88];

all=[A;B;C;D;E];
IDX=kmeans(all,2)  % 在這裡分成兩類

得出的結果是:
idx =
     2
     2
     1
     1
     2

 在這裡可以看到已經分成兩類了,成績較好的的IDX為1,稍遜的是2,

這是一個最簡單的聚類應用