跳转到内容

R 数据挖掘算法/聚类/Biclust

来自维基教科书,开放的书籍,为开放的世界

在过去的十年中,双聚类方法在双向数据分析的不同领域变得越来越流行,并且已经发表了各种算法和分析方法。

双聚类是双向数据分析中一项重要的新技术。在 Cheng 和 Church (2000) 遵循 Hartigan (1972) 的初始双聚类思想并开始计算微阵列数据的双聚类之后,发表了大量的文章,涉及不同类型的算法和方法来预处理和分析此类方法的结果。例如,在 Madeira 和 Oliveira (2004) 或 Prelic 等人 (2006) 中可以找到对几种双聚类算法的比较。

为什么选择 Biclustering?

[编辑 | 编辑源代码]
  • 对 2 个维度的同时聚类;
  • 大型数据集,其中聚类会导致分散的结果;
  • 只有部分数据互相影响;

初始情况

[编辑 | 编辑源代码]

双向数据集:

查找行和列的子组,这些子组彼此尽可能相似,并且与其余部分尽可能不同。

技术/算法

[编辑 | 编辑源代码]
Sebastian Kaiser 和 Friedrich Leisch 开始在 R (R Development Core Team, 2007) 中实现一个全面的双聚类工具箱。

它提供了一个不断增长的双聚类方法列表,以及预处理和可视化技术,使用 S4 类和方法 (Chambers, 1998)。该软件是开源的,可以从 R-Forge 免费获得,网址为 http://R-Forge.R-project.org

该软件包的主要设计原则之一是将结果提供为 Biclust-Class 的实体,一个 S4 类,其中包含结果后处理所需的所有信息。

它包含四个插槽 Parameters、RowxNumber、NumberxCol 和 Number。插槽 Parameters 包含使用的参数和算法,Number 包含找到的双聚类的数量。RowxNumber 和 NumberxCol 插槽表示已找到的双聚类。它们都是维度为 (数据行 × 找到的双聚类数量) 的逻辑矩阵,如果行 i 位于双聚类 j 中,则 RowxNumber[i,j] 中具有 TRUE 值。NumberxCol 对列来说是一样的,但出于计算原因,这里矩阵的行表示双聚类的数量,而列表示数据的列。因此,只需调用 data [ Biclust@RowxNumber[,a] * Biclust@NumberxCol[a,] ] 即可提取双聚类 a 的值。

Biclust-class 类的对象是通过对所有双聚类方法使用统一的接口创建的,调用形式为 biclust(x,method=BiclustMethod,...)。

此泛型函数将预处理的数据矩阵 x、表示为 Biclustmethod-Class 的双聚类算法以及其他参数作为输入。在下面,我们简要描述了软件包中已实现的五种算法,小节标题对应于相应的 Biclustmethod-Class 的名称。命名方案为 BCxxx,其中 xxx 是算法名称的缩写。选择了一些方法,因为可以从原始作者那里获得开源代码,而其他方法则新近实现,以使整个工具箱尽可能全面。当然,总有改进的空间,将来会向该软件包添加更多方法。有关双聚类计算主要方向的讨论,还可以参考 van Mechelen 和 Schepers (2006)。算法按字母顺序描述,如果没有另行说明,则函数在解释型 S 代码中实现。

为了在 R 中使用 Biclust 算法,必须安装 Biclust 软件包和库

install.packages("biclust")
library("biclust")
# S4 method for signature 'matrix,BCBimax': 
biclust(x, method=BCBimax(), minr=2, minc=2, number=100)
# S4 method for signature 'matrix,BCrepBimax': 
biclust(x, method=BCrepBimax(), minr=2, minc=2, number=100, maxc=12)

其中参数为

  • x - 代表数据的逻辑矩阵。
  • method - 此处为 BCBimax,用于执行 Bimax 算法。
  • minr - 结果双聚类的最小行大小。
  • minc - 结果双聚类的最小列大小。
  • number - 要找到的双聚类数量。
  • maxc - 结果双聚类的最大列大小。

如果一切顺利,将返回一个 Biclust 对象。

正如我们在下面所看到的,返回了一个 Biclust 对象,我们可以绘制它或者只是获取最终对象。
> test <- matrix(rbinom(400, 50, 0.4), 20, 20)
> res1 <- biclust(test, method=BCCC(), delta=1.5, alpha=1, number=10)
> res1

An object of class Biclust 

call:
	biclust(x = test, method = BCCC(), delta = 1.5, alpha = 1, number = 10)

Number of Clusters found:  10 

First  5  Cluster sizes:
                   BC 1 BC 2 BC 3 BC 4 BC 5
Number of Rows:    "7"  "4"  "6"  "6"  "5" 
Number of Columns: "5"  "8"  "4"  "5"  "6"
我们在“案例研究”部分提供了一些绘图示例。

案例研究

[编辑 | 编辑源代码]
作为标准示例,我们在 Barkow 等人 (2006) 的 BicatYeast 数据上运行了所有算法。为此,需要预处理数据并将其提交到 biclust 函数

以及所选算法 (此处为 Xmotifs) 和参数。

数据集

[编辑 | 编辑源代码]

BicatYeast

  • 酿酒酵母菌(酵母)的子样本。
  • 用于演示 Barkow 等人 (2006) 的双聚类算法。
  • 微阵列数据:419 个基因,80 个实验。
data(BicatYeast)
x <- discretize(BicatYeast)
res <- biclust(x, method=BCXmotifs(), alpha=0.05, number=50)
要可视化结果,您只需在结果上调用任何可视化函数,例如
> parallelCoordinates( x=BicatYeast, bicResult=res, number=4)
平行坐标图示例:结果中第 4 个双聚类中条件跨其基因的表达水平

Xmotifs 算法。

双聚类结果相似性度量,采用 Jaccard 指数的改编。

表 1 显示了所有双聚类算法的成对 Jaccard 指数。Jaccard 指数是衡量两个

聚类结果的相似性,零表示没有一致性,一表示结果相同。可以看出,所有算法都找到了非常不同的双聚类集。这可以部分解释为不同的预处理步骤,这些步骤是必要的,以便数据符合算法的各自假设。

另一个重要方面是,我们选择了第一个要实现的算法,以获得一系列彼此尽可能不同的算法。

现在,从业人员可以很容易地在 R 中尝试各种双聚类方法,并选择最适合给定数据集的方法。

参考文献

[编辑 | 编辑源代码]
  1. http://r-forge.r-project.org/projects/biclust/ 获取最新的发展情况。
  2. http://www.statistik.lmu.de/~kaiser/bicluster.html 获取论文和链接。
  3. BARKOW, S., BLEULER, S., PRELIC, A., ZIMMERMANN, P. 和 ZITZLER, E. (2006):Bicat:一个双聚类分析工具箱。生物信息学,22,1282–1283。
  4. CHAMBERS, J. M. (1998):用数据编程:S 语言指南。Chapman & Hall,伦敦。
  5. CHENG, Y. 和 CHURCH, G. M. (2000):表达数据的双聚类。在:第八届智能系统分子生物学国际会议论文集,1,93–103。
  6. GOVEART, G. 和 NADIF, M. (2003):使用块混合模型进行聚类。模式识别,36,463–473。
  7. VAN MECHELEN, I. 和 SCHEPERS, J. (2006):双聚类的统一模型。在:Compstat 2006 - 计算统计学论文集,81–88。
  8. MURALI, T. 和 KASIF, S. (2003):从基因表达中提取保守的基因表达基序。在:太平洋生物计算研讨会,8,77–88。
  9. PRELIC, A., BLEULER, S., ZIMMERMANN, P., WIL, A., BUHLMANN, P., GRUISSEM, W., HENNING, L., THIELE, L. 和 ZITZLER, E. (2006):一个

系统地比较和评估用于基因表达数据的双聚类方法。生物信息学,22(9),1122–1129。

  1. SANTAMARIA, R., THERON, R. 和 QUINTALES, L. (2007):一个分析微阵列实验中双聚类结果的框架。在:第八届智能数据工程与自动化学习国际会议 (IDEAL’07),施普林格,柏林,770–779。
  2. TURNER, H., BAILEY, T. 和 KRZANOWSKI, W. (2005):通过系统性能测试证明改进的微阵列数据双聚类。计算统计和数据分析,48,235–254。
华夏公益教科书