MATLAB聚類分析(Cluster Analysis)
阿新 • • 發佈:2019-02-10
使用環境: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,
這是一個最簡單的聚類應用