一致性聚类(用于确定聚类算法中聚类的数目)

参考资料:

原理篇1:http://blog.sina.com.cn/s/blog_6f18d6310102wdso.html
原理篇2:https://www.codercto.com/a/64568.html
R包实现:https://www.jianshu.com/p/37b4a6701e7a
R包实现:https://www.jianshu.com/p/ed4cd1ed5421
补充,有关聚类包及方法的总结:http://blog.sciencenet.cn/blog-54276-549380.html

基本原理:

从原数据集不同的子类中提取出的样本构成一个新的数据集,并且从同一个子类中有不同的样本被提取出来,那么在新数据集上聚类分析之后的结果,无论是聚类的数目还是类内样本都应该和原数据集相差不大。因此所得到的聚类相对于抽样变异越稳定,我们越可以相信这一样的聚类代表了一个真实的子类结构。重采样的方法可以打乱原始数据集,这样对每一次重采样的样本进行聚类分析然后再综合评估多次聚类分析的结果给出一致性(Consensus)的评估。--上方描述参考自:福医大生物信息学“一致性聚类”课件

具体过程为:

第一步:从原始数据中随机抽取子集,当然子集的规模不能太小,最好是原始数据集的半数以上,子集要尽量多,以确保里面的每一个数据都多次被取到(100次以上),然后,我们选择任意一种聚类方法,可以使K-means或者层次聚类,对所有的数据子集分别聚类。
第二步:这一步的关键在于建立一个新的矩阵:consensus matrix, 我们之前说聚类的输入通常是一个distance matrix。 那么consensus matrix怎么建呢?假设有D1,D2...Dn这N个数据,那么consensus matrix是NxN 的方阵。
D1 D2 D3... Dn
D1 C11 C12 C13... C1n
D2 C21 C22 C23... C2n
... Cij
Dn Cn1 Cn2 Cn3... Cnn

Cij 代表的是在多次的聚类过程中,数据Di 和数据Dj 被聚到同一类里面的概率(该值在0和1之间),等于1代表100次聚类这两个数据点全部在同一个类里面,等于0代表代表100次聚类全部不在同一个类里面。
那么,好的聚类方法会得到怎么样的consensus matrix呢?对了,全部由0或1组成的方阵,代表着那些很像的数据总在一类,而不像的数据则总是不在一类,这正符合了聚类的初衷是吧。
再对consensus matrix做一次聚类(这里用层次聚类方便可视化),只有0和1的矩阵,就让是1的都聚在一起,而0的都分开来。

你可能感兴趣的:(一致性聚类(用于确定聚类算法中聚类的数目))