跳轉到內容

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。
華夏公益教科書