scikit-learn 中文文檔-雙聚類-無監督學習|ApacheCN

中文文檔: http://sklearn.apachecn.org/cn/stable/modules/biclustering.html

英文文檔: http://sklearn.apachecn.org/en/stable/modules/biclustering.html

官方文檔: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)

貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者

關於我們: http://www.apachecn.org/organization/209.html




2.4. 雙聚類

Biclustering 可以使用 sklearn.cluster.bicluster 模塊。 Biclustering 算法對數據矩陣的行列同時進行聚類。 同時對行列進行聚類稱之爲 biclusters。 每一次聚類都會通過原始數據矩陣的一些屬性確定一個子矩陣。

例如, 一個矩陣 (10, 10) , 一個 bicluster 聚類,有三列二行,就是一個子矩陣 (3, 2)

>>>
>>> import numpy as np
>>> data = np.arange(100).reshape(10, 10)
>>> rows = np.array([0, 2, 3])[:, np.newaxis]
>>> columns = np.array([1, 2])
>>> data[rows, columns]
array([[ 1,  2],
       [21, 22],
       [31, 32]])

爲了可視化, 給定一個 bicluster 聚類,數據矩陣的行列可以重新分配,使得 bi-cluster 是連續的。

算法在如何定義 bicluster 方面有一些不同,常見類型包括:

  • 不變的 values , 不變的 rows, 或者不變的 columns。
  • 異常高的或者低的值。
  • 低方差的子矩陣。
  • 相關的 rows 或者 columns。

算法在分配給 bicluster 行列的方式不同, 會導致不同的 bicluster 結構。 當行和列分成分區時,會發生對角線或者棋盤結構。

如果每一行和每一列同屬於一種 bicluster ,就重新排列數據矩陣的行和列,會使得 bicluster 呈現對角線。 下面是一個例子,此結構的biclusters 具有比其他行列更高的平均值:

../_images/sphx_glr_plot_spectral_coclustering_0031.png

在棋盤結構的例子中, 每一行屬於所有的列類別, 每一列屬於所有的行類別。 下面是一個例子,每個 bicluster 中的值差異較小:

../_images/sphx_glr_plot_spectral_biclustering_0031.png

在擬合模型之後, 可以在 rows_ 和 columns_ 屬性中找到行列 cluster membership 。 rows_[i] 是一個二進制的向量, 就是屬於 bicluster i 的一行。 同樣的, columns_[i] 就表示屬於 bicluster i 的列。

一些模塊也有 row_labels_ 何 column_labels_ 屬性。 這些模塊對行列進行分區, 例如對角線或者棋盤 bicluster 結構。

Note

   

Biclustering 在不同的領域有很多其他名稱,包括 co-clustering, two-mode clustering, two-way clustering, block clustering, coupled two-way clustering 等.有一些算法的名稱,比如 Spectral Co-Clustering algorithm, 反應了這些備用名稱。

2.4.1. Spectral Co-Clustering

SpectralCoclustering 算法找到的 bicluster 的值比相應的其他行和列更高。

每一個行和列都只屬於一個 bicluster, 所以重新分配行和列,使得分區連續顯示對角線上的 high value:

Note

   

算法將輸入的數據矩陣看做成二分圖:該矩陣的行和列對應於兩組頂點,每個條目對應於行和列之間的邊,該算法近似的進行歸一化,對圖進行切割,找到更重的子圖。

2.4.1.1. 數學公式

找到最優歸一化剪切的近似解,可以通過圖形的 Laplacian 的廣義特徵值分解。 通常這意味着直接使用 Laplacian 矩陣. 如果原始數據矩陣 A 有形狀 m\times n, 則對應的 bipartite 圖的 Laplacian 矩陣具有形狀 (m + n) \times (m + n)。 但是, 在這種情況直接使用 A , 因爲它更小,更有作用。

輸入矩陣 A 被預處理如下:

A_n = R^{-1/2} A C^{-1/2}

R 是 i 對角線矩陣,和 \sum_{j} A_{ij} 相同, C 是 j 的對角吸納矩陣,等同於 \sum_{i} A_{ij}

奇異值分解, A_n = U \Sigma V^\top , 提供了 A 行列的分區. 左邊的奇異值向量給予行分區,右邊的奇異值向量給予列分區。

\ell = \lceil \log_2 k \rceil 奇異值向量從第二個開始, 提供所需的分區信息。 這些用於形成矩陣 :Z:

Z = \begin{bmatrix} R^{-1/2} U \\\\                    C^{-1/2} V      \end{bmatrix}

U 的列是 u_2, \dots, u_{\ell +1}, 和 V 相似 。

然後 Z 的 rows 通過使用 k-means 進行聚類. n_rows 標籤提供行分區, 剩下的 n_columns 標籤 提供 列分區。

例子:

2.4.2. Spectral Biclustering

SpectralBiclustering 算法假設輸入的數據矩陣具有隱藏的棋盤結構。 具有這種結構的矩陣的行列 可能被分區,使得在笛卡爾積中的 大部分 biclusters 的 row clusters 和 column cluster 是近似恆定的。

例如,如果有兩個row 分區和三個列分區,每一行屬於三個 bicluster ,每一列屬於兩個 bicluster。

這個算法劃分矩陣的行和列,以至於提供一個相應的塊狀不變的棋盤矩陣,近似於原始矩陣。

2.4.2.1. 數學表示

輸入矩陣 A 先歸一化,使得棋盤模式更明顯。有三種方法:

  1. 獨立的行和列歸一化, as in Spectral Co-Clustering. 這個方法使得行和一個常數相加,列和變量相加。
  2. Bistochastization: 重複行和列歸一化直到收斂。該方法使得行和列都相加

   相同的常數。

  1. Log 歸一化: 計算數據矩陣的對數 L =\log A. 列就是 \overline{L_{i \cdot}}, 行就是 \overline{L_{\cdot j}}, 總體上來看 \overline{L_{\cdot\cdot}} of L 被計算的. 最後矩陣通過下面的公式計算

K_{ij} = L_{ij} - \overline{L_{i \cdot}} - \overline{L_{\cdotj}} + \overline{L_{\cdot \cdot}}

歸一化後,首先少量的奇異值向量被計算,只是在 Spectral Co-Clustering 算法中。

如果使用 log 歸一化,則所有的奇異向量都是有意義的。但是, 如果是獨立的歸一化或雙曲線化 被使用,第一個奇異矢量, u_1 和 v_1。 會被丟棄。 從現在開始, “first” 奇異值向量與 u_2 \dots u_{p+1} 和 v_2 \dots v_{p+1} 相關,除了日誌歸一化的情況。

給定這些奇異值向量, 將他們排序,通過分段常數向量保證最佳近似。 使用一維 k-means 找到每個向量的近似值 並使用歐幾里得距離得分。 Some subset of 最好的左右奇異值向量的子集被選擇。 下一步, 數據預計到這個最佳子集的奇異向量和聚類。

例如,如果 p 奇異值向量被計算,最好按照描述找到 q , 其中 q<p。 U 列爲,the q 最佳左奇異向量的矩陣, 並且 V 對於右邊是類似的. 要劃分行, 將 A 的 投影到 q 維空間: A * V。 m 行 m \times q 矩陣的行作爲採樣和使用 k-means 的聚類處理產生行標籤。 類似地,將列投影到 A^{\top} * U ,並且對 n \times q 矩陣進行聚類得到列標籤。

示例:

.

2.4.3. Biclustering 評測

有兩種評估雙組分結果的方法:內部和外部。 諸如羣集穩定性等內部措施只依賴於數據和結果本身。 目前在scikit-learn中沒有內部的二集羣措施。外部措施是指外部信息來源,例如真正的解決方案。 當使用真實數據時,真正的解決方案通常是未知的,但是,由於真正的解決方案是已知的,因此人造數據的雙重分析可能對於評估算法非常有用。

爲了將一組已發現的雙組分與一組真正的雙組分進行比較, 需要兩個相似性度量:單個雙色團體的相似性度量,以及將這些個體相似度結合到總分中的方法。

爲了比較單個雙核,已經採用了幾種措施。現在,只有Jaccard索引被實現:

J(A, B) = \frac{|A \cap B|}{|A| + |B| - |A \cap B|}

A 和 B 是 biclusters, |A \cap B| 是交叉點的元素的數量。
Jaccard 索引 達到最小值0,當 biclusters 不重疊的時候,並且當他們相同乾的時候,最大值爲1。

有些方法已經開發出來,用來比較兩個 biclusters 的數據集。 從現在開始 之後 consensus_score (Hochreiter et. al., 2010) 是可以用:

  1. 使用 Jaccard 索引或類似措施,計算 biclusters 的 bicluster 相似性。
  2. 以一對一的方式將 bicluster 分從一組分配給另一組,以最大化其相似性的總和。該步驟使用匈牙利算法執行。
  3. 相似性的最終總和除以較大集合的大小。

最小共識得分爲0,發生在所有 biclusters 完全不相似時。當兩組 biclusters 相同時,最大分數爲1。

參考文獻:




中文文檔: http://sklearn.apachecn.org/cn/stable/modules/biclustering.html

英文文檔: http://sklearn.apachecn.org/en/stable/modules/biclustering.html

官方文檔: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)

貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者

關於我們: http://www.apachecn.org/organization/209.html

有興趣的們也可以和我們一起來維護,持續更新中 。。。

機器學習交流羣: 629470233

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章