中文文檔: 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 具有比其他行列更高的平均值:
在棋盤結構的例子中, 每一行屬於所有的列類別, 每一列屬於所有的行類別。 下面是一個例子,每個 bicluster 中的值差異較小:
在擬合模型之後, 可以在 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 矩陣. 如果原始數據矩陣 有形狀 , 則對應的 bipartite 圖的 Laplacian 矩陣具有形狀 。 但是, 在這種情況直接使用 , 因爲它更小,更有作用。
輸入矩陣 被預處理如下:
是 對角線矩陣,和 相同, 是 的對角吸納矩陣,等同於 。
奇異值分解, , 提供了 行列的分區. 左邊的奇異值向量給予行分區,右邊的奇異值向量給予列分區。
奇異值向量從第二個開始, 提供所需的分區信息。 這些用於形成矩陣 :Z:
的列是 , 和 相似 。
然後 的 rows 通過使用 k-means 進行聚類. n_rows
標籤提供行分區,
剩下的 n_columns
標籤 提供 列分區。
例子:
- A demo of the Spectral Co-Clustering algorithm: 如何用 bicluster 數據矩陣並應用。
- Biclustering documents with the Spectral Co-clustering algorithm:一個在 20 個新聞組數據集中發現 biclusters 的例子
參考文獻:
- Dhillon, Inderjit S, 2001. Co-clustering documents and words using bipartite spectral graph partitioning.
2.4.2. Spectral Biclustering
SpectralBiclustering
算法假設輸入的數據矩陣具有隱藏的棋盤結構。
具有這種結構的矩陣的行列 可能被分區,使得在笛卡爾積中的 大部分 biclusters 的 row clusters 和 column cluster 是近似恆定的。
例如,如果有兩個row 分區和三個列分區,每一行屬於三個 bicluster ,每一列屬於兩個 bicluster。
這個算法劃分矩陣的行和列,以至於提供一個相應的塊狀不變的棋盤矩陣,近似於原始矩陣。
2.4.2.1. 數學表示
輸入矩陣 先歸一化,使得棋盤模式更明顯。有三種方法:
- 獨立的行和列歸一化, as in Spectral Co-Clustering. 這個方法使得行和一個常數相加,列和變量相加。
- Bistochastization: 重複行和列歸一化直到收斂。該方法使得行和列都相加
相同的常數。
- Log 歸一化: 計算數據矩陣的對數 . 列就是 , 行就是 , 總體上來看 of 被計算的. 最後矩陣通過下面的公式計算
歸一化後,首先少量的奇異值向量被計算,只是在 Spectral Co-Clustering 算法中。
如果使用 log 歸一化,則所有的奇異向量都是有意義的。但是, 如果是獨立的歸一化或雙曲線化 被使用,第一個奇異矢量, 和 。 會被丟棄。 從現在開始, “first” 奇異值向量與 和 相關,除了日誌歸一化的情況。
給定這些奇異值向量, 將他們排序,通過分段常數向量保證最佳近似。 使用一維 k-means 找到每個向量的近似值 並使用歐幾里得距離得分。 Some subset of 最好的左右奇異值向量的子集被選擇。 下一步, 數據預計到這個最佳子集的奇異向量和聚類。
例如,如果 奇異值向量被計算,最好按照描述找到 , 其中 。 列爲,the 最佳左奇異向量的矩陣, 並且 對於右邊是類似的. 要劃分行, 將 的 投影到 維空間: 。 行 矩陣的行作爲採樣和使用 k-means 的聚類處理產生行標籤。 類似地,將列投影到 ,並且對 矩陣進行聚類得到列標籤。
示例:
- A demo of the Spectral Biclustering algorithm: 一個簡單的例子 顯示如何生成棋盤矩陣和 bicluster
.
參考文獻:
- Kluger, Yuval, et. al., 2003. Spectral biclustering of microarray data: coclustering genes and conditions.
2.4.3. Biclustering 評測
有兩種評估雙組分結果的方法:內部和外部。 諸如羣集穩定性等內部措施只依賴於數據和結果本身。 目前在scikit-learn中沒有內部的二集羣措施。外部措施是指外部信息來源,例如真正的解決方案。 當使用真實數據時,真正的解決方案通常是未知的,但是,由於真正的解決方案是已知的,因此人造數據的雙重分析可能對於評估算法非常有用。
爲了將一組已發現的雙組分與一組真正的雙組分進行比較, 需要兩個相似性度量:單個雙色團體的相似性度量,以及將這些個體相似度結合到總分中的方法。
爲了比較單個雙核,已經採用了幾種措施。現在,只有Jaccard索引被實現:
- 和 是 biclusters, 是交叉點的元素的數量。
- Jaccard 索引 達到最小值0,當 biclusters 不重疊的時候,並且當他們相同乾的時候,最大值爲1。
有些方法已經開發出來,用來比較兩個 biclusters 的數據集。 從現在開始 之後 consensus_score
(Hochreiter
et. al., 2010) 是可以用:
- 使用 Jaccard 索引或類似措施,計算 biclusters 的 bicluster 相似性。
- 以一對一的方式將 bicluster 分從一組分配給另一組,以最大化其相似性的總和。該步驟使用匈牙利算法執行。
- 相似性的最終總和除以較大集合的大小。
最小共識得分爲0,發生在所有 biclusters 完全不相似時。當兩組 biclusters 相同時,最大分數爲1。
參考文獻:
- Hochreiter, Bodenhofer, et. al., 2010. FABIA: factor analysis for bicluster acquisition.
中文文檔: 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