首页 > 代码库 > 对三维数据集的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;