Algorithme de biclustering spectral

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous utiliserons l'algorithme de biclustering spectral pour regrouper des données en considérant simultanément les lignes (échantillons) et les colonnes (caractéristiques) d'une matrice. Son but est d'identifier des modèles non seulement entre les échantillons, mais également au sein de sous-ensembles d'échantillons, permettant de détecter une structure localisée dans les données. Cela rend le biclustering spectral particulièrement adapté à des ensembles de données où l'ordre ou l'arrangement des caractéristiques est fixe, comme dans les images, les séries temporelles ou les génomes. Nous utiliserons la bibliothèque scikit-learn pour générer un ensemble de données en damier et le regrouper en biclusters à l'aide de l'algorithme de biclustering spectral.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/cluster("Clustering") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/cluster -.-> lab-49300{{"Algorithme de biclustering spectral"}} sklearn/metrics -.-> lab-49300{{"Algorithme de biclustering spectral"}} sklearn/datasets -.-> lab-49300{{"Algorithme de biclustering spectral"}} ml/sklearn -.-> lab-49300{{"Algorithme de biclustering spectral"}} end

Générer des données d'échantillonnage

Nous générons les données d'échantillonnage à l'aide de la fonction make_checkerboard. Chaque pixel dans shape=(300, 300) représente avec sa couleur une valeur provenant d'une distribution uniforme. Du bruit est ajouté à partir d'une distribution normale, où la valeur choisie pour noise est l'écart-type.

from sklearn.datasets import make_checkerboard
from matplotlib import pyplot as plt

n_clusters = (4, 3)
data, rows, columns = make_checkerboard(
    shape=(300, 300), n_clusters=n_clusters, noise=10, shuffle=False, random_state=42
)

plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Original dataset")
_ = plt.show()

Mélanger les données

Nous mélangeons les données et le but est de les reconstruire ensuite à l'aide de SpectralBiclustering.

import numpy as np

## Création de listes d'indices de lignes et de colonnes mélangés
rng = np.random.RandomState(0)
row_idx_shuffled = rng.permutation(data.shape[0])
col_idx_shuffled = rng.permutation(data.shape[1])

## Redéfinition des données mélangées et affichage.
data = data[row_idx_shuffled][:, col_idx_shuffled]

plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Shuffled dataset")
_ = plt.show()

Ajuster SpectralBiclustering

Nous ajustons le modèle et comparons les clusters obtenus avec la vérité terrain. Notez que lors de la création du modèle, nous spécifions le même nombre de clusters que celui que nous avons utilisé pour créer l'ensemble de données (n_clusters = (4, 3)), ce qui contribuera à obtenir un bon résultat.

from sklearn.cluster import SpectralBiclustering
from sklearn.metrics import consensus_score

model = SpectralBiclustering(n_clusters=n_clusters, method="log", random_state=0)
model.fit(data)

## Calculer la similarité de deux ensembles de biclusters
score = consensus_score(
    model.biclusters_, (rows[:, row_idx_shuffled], columns[:, col_idx_shuffled])
)
print(f"consensus score: {score:.1f}")

Tracer les résultats

Maintenant, nous réorganisons les données en fonction des étiquettes de ligne et de colonne attribuées par le modèle SpectralBiclustering dans l'ordre croissant et nous les traçons à nouveau. Les row_labels_ vont de 0 à 3, tandis que les column_labels_ vont de 0 à 2, représentant un total de 4 clusters par ligne et 3 clusters par colonne.

## Reordonner d'abord les lignes puis les colonnes.
reordered_rows = data[np.argsort(model.row_labels_)]
reordered_data = reordered_rows[:, np.argsort(model.column_labels_)]

plt.matshow(reordered_data, cmap=plt.cm.Blues)
plt.title("After biclustering; rearranged to show biclusters")
_ = plt.show()

En tant que dernière étape, nous voulons démontrer les relations entre les étiquettes de ligne et de colonne attribuées par le modèle. Par conséquent, nous créons une grille avec numpy.outer, qui prend les row_labels_ et column_labels_ triés et ajoute 1 à chacun pour s'assurer que les étiquettes commencent à 1 au lieu de 0 pour une meilleure visualisation.

plt.matshow(
    np.outer(np.sort(model.row_labels_) + 1, np.sort(model.column_labels_) + 1),
    cmap=plt.cm.Blues,
)
plt.title("Checkerboard structure of rearranged data")
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser l'algorithme de biclustering spectral pour regrouper des données en considérant simultanément les lignes (échantillons) et les colonnes (caractéristiques) d'une matrice. Nous avons généré un ensemble de données en damier et l'avons biclustérisé à l'aide de l'algorithme de biclustering spectral. Nous avons également visualisé les résultats pour démontrer les relations entre les étiquettes de ligne et de colonne attribuées par le modèle.