Séparation des sources cachées

Beginner

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

Introduction

Dans ce laboratoire, nous utiliserons FastICA pour effectuer la séparation des sources cachées sur un signal mixte. La séparation des sources cachées est une technique utilisée pour séparer les signaux mixtes en leurs composantes indépendantes d'origine. Cela est utile dans divers domaines tels que le traitement du signal, le traitement d'images et l'analyse de données. Nous utiliserons la bibliothèque scikit-learn de Python pour effectuer l'ICA et la PCA sur un signal mixte d'échantillonnage.

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 à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de 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.

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

Nous allons générer un signal mixte d'échantillonnage composé de trois composantes indépendantes. Nous allons ajouter du bruit au signal et standardiser les données. Nous allons également générer une matrice de mélange pour mélanger nos trois composantes indépendantes.

import numpy as np
from scipy import signal

np.random.seed(0)
n_samples = 2000
time = np.linspace(0, 8, n_samples)

s1 = np.sin(2 * time)  ## Signal 1 : signal sinusoïdal
s2 = np.sign(np.sin(3 * time))  ## Signal 2 : signal carré
s3 = signal.sawtooth(2 * np.pi * time)  ## Signal 3: signal en dents de scie

S = np.c_[s1, s2, s3]
S += 0.2 * np.random.normal(size=S.shape)  ## Ajouter du bruit

S /= S.std(axis=0)  ## Standardiser les données
## Mélanger les données
A = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]])  ## Matrice de mélange
X = np.dot(S, A.T)  ## Générer les observations

Ajuster les modèles ICA et PCA

Nous utiliserons FastICA pour estimer les sources indépendantes. Nous calculerons ensuite la PCA pour la comparaison.

from sklearn.decomposition import FastICA, PCA

## Calculer l'ICA
ica = FastICA(n_components=3, whiten="arbitrary-variance")
S_ = ica.fit_transform(X)  ## Reconstruire les signaux
A_ = ica.mixing_  ## Obtenir la matrice de mélange estimée

## Nous pouvons `prouver` que le modèle ICA s'applique en inversant le démélange.
assert np.allclose(X, np.dot(S_, A_.T) + ica.mean_)

## Pour la comparaison, calculer la PCA
pca = PCA(n_components=3)
H = pca.fit_transform(X)  ## Reconstruire les signaux basés sur les composantes orthogonales

Tracer les résultats

Nous allons tracer le signal mixte original, les sources indépendantes d'origine, les sources estimées par l'ICA et les sources estimées par la PCA.

import matplotlib.pyplot as plt

plt.figure()

models = [X, S, S_, H]
names = [
    "Observations (signal mixte)",
    "Véritables sources",
    "Signaux récupérés par l'ICA",
    "Signaux récupérés par la PCA",
]
couleurs = ["rouge", "bleu acier", "orange"]

Pour ii, (modèle, nom) dans enumerate(zip(models, names), 1):
    plt.subplot(4, 1, ii)
    plt.title(nom)
    Pour sig, couleur dans zip(model.T, couleurs):
        plt.plot(sig, couleur=couleur)

plt.tight_layout()
plt.show()

Sommaire

Nous avons effectué avec succès la séparation des sources cachées sur un signal mixte en utilisant FastICA et PCA. Nous avons généré un signal mixte d'échantillonnage composé de trois composantes indépendantes, ajouté du bruit et standardisé les données. Nous avons ensuite généré une matrice de mélange pour mélanger nos composantes indépendantes. Nous avons utilisé FastICA pour estimer les sources indépendantes et calculé la PCA pour la comparaison. Enfin, nous avons tracé le signal mixte original, les sources indépendantes d'origine, les sources estimées par l'ICA et les sources estimées par la PCA.