對三維數據集的K-means聚類研究
本文是在《根據”關於‘k-means算法在流式細胞儀中細胞分類的應用’的學習筆記總結“撰寫的中期報告》一文的基礎上,對該實驗數據中的CD3/CD8/CD45三種抗原分子的三列熒光強度數據在Matlab環境下進行K-means聚類研究。
實驗數據地址:http://pan.baidu.com/s/1hqomDq0
由於之前論文查重時查到了《根據”關於‘k-means算法在流式細胞儀中細胞分類的應用’的學習筆記總結“撰寫的中期報告》一文,現特摘取論文中部分內容修改后輯成本文,文字盡量精簡。待論文事情結束后我會在整理成另一篇文章。
對以CD3/CD8/CD45為分類指標所對應的三列光譜數據進行減法聚類。
程序
A=load('CD3-8-45-4.txt');
X=A(:,[4 5 6]);
[C,S]=subclust(X,0.5,[],[1.25 0.5 0.15 0]);
得到聚類中心為
C=
79 75 62
102 74 490
576 74 536
設置參數k=3,進行聚類。
程序
idx3=kmeans(X,3,'dist','city','display','iter');
得到聚類中心為
cent3=
99 78 470
552 97 552
78 78 54
由於都是三維矩陣,為便於比較,可以用三維散點圖在三維空間中顯示出兩組聚類中心,分別用星號*和三角△表示。
程序
plot(0,0);
hold on
view(3)
plot3(C(:,1),C(:,2),C(:,3),'*')
hold on
plot3(cent3(:,1),cent3(:,2),cent3(:,3),'^')
圖1 k=3時的兩組聚類中心
兩組聚類中心並不完全重合。下面兩個聚類中心契合度較高,而上面一個偏離較大,顯然k是不可能為3的。
在三維空間中用散點圖表示出各樣本點。
程序
plot(0,0);
hold on
view(3)
plot3(X(:,1),X(:,2),X(:,3),'*')
圖2 三維樣本集的散點圖
各個坐標軸分別表示三種抗原分子對應的熒光強度。結合圖1,很容易猜測有四個聚類中心,即k很可能等於4。
設置k=4,再次進行K-means聚類。
程序
[idx4 cent4]=kmeans(X,4,'dist','city','display','iter');
得到
cent4 =
98 79 472
552 97 552
70 78 0
85 77 91
在上面圖1的三維空間中繼續繪出聚類中心cent4,用圓圈○表示。
程序
plot(0,0);
hold on
view(3)
plot3(C(:,1),C(:,2),C(:,3),'*')
hold on
plot3(cent3(:,1),cent3(:,2),cent3(:,3),'^')
hold on
plot3(cent4(:,1),cent3(:,2),cent4(:,3),'o')
圖3 k=3、4時的聚類中心
顯然,k=4時的聚類中心包含了k=3時的兩組聚類中心,而且契合度非常高,所以應該聚成4類。
繪制k分別取3和4時的輪廓圖,並比較。
程序
figure(1)
[silh3,h3]=silhouette(X,idx3,'city');
figure(2)
[silh4,h4]=silhouette(X,idx4,'city');
圖4 k=3時輪廓圖
圖5 k=4時輪廓圖
通過比較,很容易確定k=4時,聚類效果更好。
采用不同的顏色、不同的標記,用比較容易觀察的三維散點圖展示上面的最終聚類。
程序
plot(0,0)
hold on
view(3)
plot3(X(idx4==1,1),X(idx4==1,2),X(idx4==1,3),'b*')
hold on
plot3(X(idx4==2,1),X(idx4==2,2),X(idx4==2,3),'r.')
hold on
plot3(X(idx4==3,1),X(idx4==3,2),X(idx4==3,3),'yo')
hold on
plot3(X(idx4==4,1),X(idx4==4,2),X(idx4==4,3),'^')
圖6 樣本數據分成四類的三維散點圖
font-size: 16px;