加载中…
正文 字体大小:

聚类的续篇,如何选取参数?

(2016-07-22 18:47:49)
标签:

consensusclustering

聚类

分类: Computer
       在前一篇博文中,我重点讨论了聚类这一常用的分类算法,侧重点在于二种聚类方法(k-means以及层次聚类)的原理以及实现。同时也提到,聚类最难的部分并不在原理或者实现上,而在于如何选择合适的参数从而得到最优的分类(最优包括稳定的,有意义的分类结果),其中稳定的分类是前提,不能几次聚类得到的结果差别很大,那样结果就不可信。有意义的分类,通常让你分类的数据在现实中都有某些实际的意义,生物学上的一些数据,比如不同的RNA序列经过聚类,我们目标是得到具有特定生物学意义的分类(与某种疾病相关啊或者与某种生物学功能相关啊这些)。所以,聚类只是方法,最终我们要回答的问题是得到的类有什么特征,有什么意义。
       我用过得选择聚类参数的方法主要是ConsensusClustering,该方法的论文引用很高(接近1000次),是指导老师推荐我使用的方法。总的来说,一致性聚类通过改变聚类的数据集(里面的数据全部从原始数据中抽取,也可以理解为是原始数据的子集),通过考量任意一个数据在不同样本中聚类表现的一致性来确定聚类的参数是否合适。下面我具体讲讲怎么操作的。(下面的图片均是来自参考文献中的)
       第一步:从原始数据中随机抽取子集,当然子集的规模不能太小,最好是原始数据集的半数以上(这是我自己理解的,数据太少聚类的话没有意义),子集要尽量多,以确保里面的每一个数据都多次被取到(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的都分开来,用heatmap看起来就是下面这样的;
聚类的续篇,如何选取参数? 

看起来很爽吧,这就是离得近的全部都聚在红色块里面而且分的很开。那么差的聚类就没这么好看了;

聚类的续篇,如何选取参数?

比如,上面的情况,我们取不同的k值时,显然聚类效果不同,越是干净,越是效果好;不好的聚类参数则表现出越是有很多“噪音”。
有些情况下,仅仅通过看不同参数下consensus matrix聚类出来的热图就基本可以判断怎么选择了。当然还有根据consensus matrix得来的数学参数用于评估聚类的稳定性的,这里我就暂且不写上来了。感兴趣的去下载参考文献自己看吧!
 
Reference:
 
Monti,S., et al. (2003) Consensus clustering: A resampling-based method for class discovery and visualization of gene microarray, Mach Learn,52, 91-118

  

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有