2.4. Biclustering¶
El biclustering puede realizarse con el módulo sklearn.cluster.bicluster
. Los algoritmos de biclustering agrupan simultáneamente filas y columnas de una matriz de datos. Estos clusters de filas y columnas se conocen como biclusters. Cada uno determina una submatriz de la matriz de datos original con algunas propiedades deseadas.
Por ejemplo, dada una matriz de forma (10, 10)
, un bicluster posible con tres filas y dos columnas induce un submatriz de la forma (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]])
Para fines de visualización, dado un bicluster, las filas y columnas de la matriz de datos pueden ser reorganizadas para hacer el bicluster contiguo.
Los algoritmos difieren en cómo se definen los biclusters. Algunos de los tipos comunes incluyen:
valores constantes, filas constantes o columnas constantes
valores inusualmente altos o bajos
submatrices con baja varianza
filas o columnas correlacionadas
Los algoritmos también difieren en la forma de asignar filas y columnas a los biclusters, lo que da lugar a diferentes estructuras de bicluster. Las estructuras de bloque diagonal o de tablero de ajedrez se producen cuando las filas y las columnas se dividen en particiones.
Si cada fila y cada columna pertenecen exactamente a un biclúster, el reordenamiento de las filas y columnas de la matriz de datos revela los biclústeres en la diagonal. He aquí un ejemplo de esta estructura en la que los biclusters tienen valores medios más altos que las demás filas y columnas:

Un ejemplo de biclusters formado por particionado de filas y columnas.¶
En el caso del tablero de ajedrez, cada fila pertenece a todos los grupos de columnas y cada columna pertenece a todos los grupos de filas. He aquí un ejemplo de esta estructura en la que la varianza de los valores dentro de cada bicluster es pequeña:

Un ejemplo de biclusters de tablero de ajedrez.¶
Después de ajustar un modelo, la pertenencia a los clusters de filas y columnas se puede encontrar en los atributos rows_
y columns_
. El atributo rows_[i]
es un vector binario con entradas no nulas que corresponden a las filas que pertenecen al bicluster i
. Del mismo modo, columns_[i]
indica qué columnas pertenecen al bicluster i
.
Algunos modelos también tienen atributos row_labels_
y column_labels_
. Estos modelos particionan las filas y columnas, como en las estructuras de bicluster del bloque diagonal y del tablero de ajedrez.
Nota
El biclustering tiene muchos otros nombres en diferentes campos, como co-clustering, clustering de dos modos, clustering de dos vías, clustering de bloques, clustering de dos vías acoplado, etc. Los nombres de algunos algoritmos, como el algoritmo de Co-Clustering Espectral, reflejan estos nombres alternativos.
2.4.1. Co-Clustering espectral¶
El algoritmo SpectralCoclustering
encuentra biclusters con valores más altos que los de las otras filas y columnas correspondientes. Cada fila y cada columna pertenecen exactamente a un biclúster, por lo que la reorganización de las filas y columnas para que las particiones sean contiguas revela estos valores altos a lo largo de la diagonal:
Nota
El algoritmo trata la matriz de datos de entrada como un grafo bipartito: las filas y columnas de la matriz corresponden a los dos conjuntos de vértices, y cada entrada corresponde a una arista entre una fila y una columna. El algoritmo aproxima el corte normalizado de este grafo para encontrar subgrafos pesados.
2.4.1.1. Formulación matemática¶
Una solución aproximada al corte óptimo normalizado puede encontrarse a través de la descomposición generalizada de valores propios del laplaciano del grafo. Normalmente, esto significaría trabajar directamente con la matriz laplaciana. Si la matriz de datos original
La matriz de entrada
Donde
La descomposición del valor singular,
Los vectores singulares
donde las columnas de
A continuación, las filas de n_rows
proporcionan la partición de las filas, y las restantes etiquetas n_columns
proporcionan la partición de las columnas.
Ejemplos:
Una demostración del algoritmo de Co-Clustering Espectral: Un ejemplo simple que muestra cómo generar una matriz de datos con biclusters y aplicar este método a ella.
Biclustering de documentos con el algoritmo Co-clustering Espectral: Un ejemplo de búsqueda de biclusters en el conjunto de datos de veinte grupos de comunicación.
Referencias:
Dhillon, Inderjit S, 2001. Co-clustering documents and words using bipartite spectral graph partitioning.
2.4.2. Biclustering espectral¶
El algoritmo SpectralBiclustering
supone que la matriz de datos de entrada tiene una estructura de tablero de ajedrez oculto. Las filas y las columnas de una matriz con esta estructura pueden dividirse de forma que las entradas de cualquier bicluster en el producto cartesiano de los clusters de filas y los clusters de columnas sean aproximadamente constantes. Por ejemplo, si hay dos particiones de filas y tres de columnas, cada fila pertenecerá a tres biclústeres y cada columna pertenecerá a dos biclústeres.
El algoritmo divide las filas y las columnas de una matriz de modo que la correspondiente matriz en forma de tablero de ajedrez con constantes de bloque proporciona una buena aproximación a la matriz original.
2.4.2.1. Formulación matemática¶
La matriz de entrada
Normalización independiente de filas y columnas, como en el Co-Clustering Espectral. Este método hace que las filas sumen una constante y las columnas sumen una constante diferente.
Bistocastizacion: normalización repetida de filas y columnas hasta la convergencia. Este método hace que tanto las filas como las columnas sumen la misma constante.
Normalización logarítmica: se calcula el logaritmo de la matriz de datos:
. A continuación, se calcula la media de las columnas overline{L_{cdot j}}, y la media global . La matriz final se calcula según la fórmula
Después de la normalización, se calculan los primeros vectores singulares, al igual que en el algoritmo de coagrupación espectral.
Si se utilizó la normalización logarítmica, todos los vectores singulares son significativos. Sin embargo, si se utilizó la normalización independiente o la bistocastizacion, los primeros vectores singulares,
Dados estos vectores singulares, se clasifican en función de cuál de ellos puede ser mejor aproximado por un vector a trozos. Las aproximaciones de cada vector se encuentran utilizando k-means unidimensional y se califican utilizando la distancia euclidiana. Se selecciona un subconjunto del mejor vector singular izquierdo y derecho. A continuación, los datos se proyectan a este mejor subconjunto de vectores singulares y se agrupan.
Por ejemplo, si se calcularon los vectores singulares
Ejemplos:
Una demostración del algoritmo Biclustering Espectral: un ejemplo simple que muestra cómo generar una matriz de tablero de ajedrez y bicluster.
Referencias:
Kluger, Yuval, et. al., 2003. Spectral biclustering of microarray data: coclustering genes and conditions.
2.4.3. Evaluación de Biclustering¶
Hay dos formas de evaluar un resultado de biclustering: interna y externa. Las medidas internas, como la estabilidad de los clusters, se basan únicamente en los datos y en el propio resultado. Actualmente no hay medidas internas de bicluster en scikit-learn. Las medidas externas se refieren a una fuente de información externa, como la solución verdadera. Cuando se trabaja con datos reales, la solución verdadera suele ser desconocida, pero el biclustering de datos artificiales puede ser útil para evaluar algoritmos precisamente porque la solución verdadera es conocida.
Para comparar un conjunto de biclusters encontrados con el conjunto de biclusters verdaderos, se necesitan dos medidas de similitud: una medida de similitud para los biclusters individuales, y una forma de combinar estas similitudes individuales en una puntuación global.
Para comparar biclusters individuales, se han utilizado varias medidas. Por ahora, sólo se aplica el índice de Jaccard:
donde
Se han desarrollado varios métodos para comparar dos conjuntos de biclusters. Por ahora, solo consensus_score
(Hochreiter et. al., 2010) está disponible:
Calcula las similitudes de bicluster para pares de biclusters, una en cada conjunto, utilizando el índice de Jaccard o una medida similar.
Asigna biclusters de un conjunto a otro de una manera una-a otra para maximizar la suma de sus similitudes. Este paso se realiza utilizando el algoritmo húngaro.
La suma final de similitudes se divide por el tamaño del conjunto más grande.
La puntuación mínima de consenso, 0, se produce cuando todos los pares de biclusters son totalmente disímiles. La puntuación máxima, 1, se produce cuando ambos conjuntos son idénticos.
Referencias:
Hochreiter, Bodenhofer, et. al., 2010. FABIA: factor analysis for bicluster acquisition.