首页 > 代码库 > 对三维数据集的K-means聚类研究

对三维数据集的K-means聚类研究

对三维数据集的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;