一、定义及K值选择

基本原理假设:一致性聚类通过基于重采样的方法来验证聚类合理性,其主要目的是评估聚类的稳定性。

即通过改变聚类的数据集(里面的数据全部从原始数据中抽取,也可以理解为是原始数据的子集),通过考量任意一个数据在不同样本中聚类表现的一致性来确定聚类的参数是否合适。

第一步:从原始数据中随机抽取子集,当然子集的规模不能太小,最好是原始数据集的半数以上(这是我自己理解的,数据太少聚类的话没有意义),子集要尽量多,以确保里面的每一个数据都多次被取到(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组成的方阵,代表着那些很像的数据总在一类,而不像的数据则总是不在一类,这正符合了聚类的初衷是吧。

一致性聚类中最重要的是K值的确定,以下提供了几种确定K值的方法:

1.热图

对consensus matrix做一次聚类(这里用层次聚类方便可视化),只有0和1的矩阵,就让是1的都聚在一起,而0的都分开来,用heatmap看起来就是下面这样的;

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

比如,上面的情况,我们取不同的k值时,显然聚类效果不同,越是干净,越是效果好;不好的聚类参数则表现出越是有很多“噪音”。

有些情况下,仅仅通过看不同参数下consensus matrix聚类出来的热图就基本可以判断怎么选择了。

2.其他特征

  • 直方图(直方图大部分分布在0和1时,聚类效果越好,Figure 3(a) 下图)
  • CDF (Cumulative Distribution Function),此图展示了K取不同数值时的累计分布函数,用于判断K值取何值时,CDF达到近似最大值,此时的聚类分析结果最可靠,通常取CDF下降坡度小的K值。
  • area under CDF change (此图展示的是K和K-1相比CDF曲线下面积的相对变化,Figure 3(c) 下图,当K=4时,曲线下面积增长幅度接近0,故3为合适的K值)

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

二、R实现

在ConsensusClusterPlus包中实现

##使用ALL示例数据
library(ALL)
data(ALL)
d=exprs(ALL)#筛选前5000标准差的基因
mads=apply(d,1,mad)
d=d[rev(order(mads))[1:5000],]#sweep函数减去中位数进行标准化
d = sweep(d,1, apply(d,1,median,na.rm=T))#一步完成聚类
library(ConsensusClusterPlus)
title=tempdir()
results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1,title=title,clusterAlg="hc",distance="pearson",seed=1262118388.71279,plot="png")
#输出K=2时的一致性矩阵
results[[2]][["consensusMatrix"]][1:5,1:5][,1]      [,2]      [,3]      [,4]     [,5]
[1,] 1.0000000 1.0000000 0.8947368 1.0000000 1.000000
[2,] 1.0000000 1.0000000 0.9142857 1.0000000 1.000000
[3,] 0.8947368 0.9142857 1.0000000 0.8857143 0.969697
[4,] 1.0000000 1.0000000 0.8857143 1.0000000 1.000000
[5,] 1.0000000 1.0000000 0.9696970 1.0000000 1.000000#hclust选项
results[[2]][["consensusTree"]]Call:
hclust(d = as.dist(1 - fm), method = finalLinkage)Cluster method   : average
Number of objects: 128 #样本分类
results[[2]][["consensusClass"]][1:5]01005 01010 03002 04006 04007 1     1     1     1     1 #计算聚类一致性 (cluster-consensus) 和样品一致性 (item-consensus)
icl <- calcICL(results, title = title,plot = "png")
## 返回了具有两个元素的list,然后分别查看一下
dim(icl[["clusterConsensus"]])[1] 20  3
icl[["clusterConsensus"]] dim(icl[["itemConsensus"]])[1] 2560    4
icl[["itemConsensus"]][1:5,] 

参考文章:http://www.360doc.com/content/20/0415/23/46752147_906313676.shtml

ConsensusClustering及R实现相关推荐

  1. 秀一下以前搜房soufun发贴机的发帖群发日志!!呵呵..

    秀一下以前搜房soufun论坛发贴机的发帖群发日志!!呵呵.. QQ 1163551688 "2009-11-28 18:00:06 562","qwerty00789& ...

  2. 给定一个 n X n 的矩阵 和 R,求旋转 90 X R 度以后的矩阵

    1. 问题 [例题]循环输入,每组数据先输入一个 n(n<=10),然后 n 行 n 列数据代表一个矩阵, 每个数据为一个整数,然后再给出一个数字 R,输出这个矩阵按照顺时针旋转 90 X R ...

  3. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  4. \r \r\n \t的区别

    \n 软回车:       在Windows 中表示换行且回到下一行的最开始位置.相当于Mac OS 里的 \r 的效果.       在Linux.unix 中只表示换行,但不会回到下一行的开始位置 ...

  5. adb install -r ,-d 等的解释

    adb install -r 替换已存在的应用程序,也就是说强制安装 adb install -l 锁定该应用程序 adb install -t 允许测试包 adb install -s 把应用程序安 ...

  6. Android Studio – Cannot resolve symbol ‘R’

    Android Studio – Cannot resolve symbol 'R' 解决方法: Build -> Clean Project Tools -> Android -> ...

  7. android R文件丢失解决方法

    今天下载一个demo导入之后发现一个问题,提示导入的R包只有系统默认的 没有项目的,可以看下图 这种情况出现呢不多,但是出现了我就记录下,这个先看看R文件是不是还在 点击Gen包 查看 看看R文件是不 ...

  8. VS Code go 插件安装失败 r.declReader.Reset undefined

    在安装完 VS Code 后开始安装 go 的插件发现有如下错误 wohu@wohu:~/GoCode/src$ go install github.com/nsf/gocode # github.c ...

  9. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

最新文章

  1. Vue涉及国家安全漏洞?尤雨溪亲自回应
  2. 友盟分享小程序_iOS分享微信小程序
  3. 彭山计算机培训,彭山2021年初中生学计算机
  4. ML - 常用数学符号
  5. 使用Python将数据插入数据库(一)
  6. Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure...........
  7. 智能优化算法:蛇优化算法-附代码
  8. 开会时,尽量考虑录音
  9. 上中下结构html网页代码,简单理解网页源码(HTML源代码)
  10. matlab画全连接网络,无标度网络及MATLAB建模.pdf
  11. python文件和数据格式化
  12. matlab鼠标截取图像并显示_matlab图像剪裁命令imcrop()
  13. MOSFET的雪崩特性
  14. 基于SSL/TLS双向安全连接设备CA证书认证
  15. 常用DOS命令和Path环境变量的配置
  16. MATLAB 打不开coder,MATLAB CODER初次使用的错误提示,希望大侠可以帮忙解决!...
  17. 友价商城源代码插件汇总
  18. 源码包安装 httpd
  19. JS 中 apos;helloapos; 和 new String(apos;helloapos;) 引出的问题
  20. 西门子安装未找到ssf文件_三菱、西门子软件安装常见出错解决方法「技成周报40期」...

热门文章

  1. 有限差分方程c语言,规则网格有限差分解声波方程个人总结报告规则网格有限差分解声波方程个人总结报告.doc...
  2. 多源BFS-双端队列广搜
  3. 创业公司天使轮、A轮、融资时股权分配
  4. Vue项目的优化(二)
  5. iOS 视频合成相关
  6. 2018全球Top 1000 计算机科学家h指数发布,中国29名学者上榜!
  7. php实现删除数据库中内容,php – 从数据库中删除内容,安全预防措施
  8. matlab 输入普朗克常量,半导体激光器线宽展宽因子的理论与实验分析.pdf
  9. LiDAR数据下载步骤
  10. 方差分析(单因素方差分析)