Skip to content
Snippets Groups Projects
Commit 0d02df37 authored by GILSON Matthieu's avatar GILSON Matthieu
Browse files

Upload New File

parent e31d2744
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id: tags:
``` python
%matplotlib inline
```
%% Cell type:markdown id: tags:
\n# Blind source separation using FastICA\n\nAn example of estimating sources from noisy data.\n\n`ICA` is used to estimate sources given noisy measurements.\nImagine 3 instruments playing simultaneously and 3 microphones\nrecording the mixed signals. ICA is used to recover the sources\nie. what is played by each instrument. Importantly, PCA fails\nat recovering our `instruments` since the related signals reflect\nnon-Gaussian processes.
%% Cell type:markdown id: tags:
## Generate sample data
%% Cell type:code id: tags:
``` python
import numpy as np\nfrom scipy import signal\n\nnp.random.seed(0)\nn_samples = 2000\ntime = np.linspace(0, 8, n_samples)\n\ns1 = np.sin(2 * time) # Signal 1 : sinusoidal signal\ns2 = np.sign(np.sin(3 * time)) # Signal 2 : square signal\ns3 = signal.sawtooth(2 * np.pi * time) # Signal 3: saw tooth signal\n\nS = np.c_[s1, s2, s3]\nS += 0.2 * np.random.normal(size=S.shape) # Add noise\n\nS /= S.std(axis=0) # Standardize data\n# Mix data\nA = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]]) # Mixing matrix\nX = np.dot(S, A.T) # Generate observations
```
%% Cell type:markdown id: tags:
## Fit ICA and PCA models
%% Cell type:code id: tags:
``` python
from sklearn.decomposition import FastICA, PCA\n\n# Compute ICA\nica = FastICA(n_components=3, whiten="arbitrary-variance")\nS_ = ica.fit_transform(X) # Reconstruct signals\nA_ = ica.mixing_ # Get estimated mixing matrix\n\n# We can `prove` that the ICA model applies by reverting the unmixing.\nassert np.allclose(X, np.dot(S_, A_.T) + ica.mean_)\n\n# For comparison, compute PCA\npca = PCA(n_components=3)\nH = pca.fit_transform(X) # Reconstruct signals based on orthogonal components
```
%% Cell type:markdown id: tags:
## Plot results
%% Cell type:code id: tags:
``` python
import matplotlib.pyplot as plt\n\nplt.figure()\n\nmodels = [X, S, S_, H]\nnames = [\n "Observations (mixed signal)",\n "True Sources",\n "ICA recovered signals",\n "PCA recovered signals",\n]\ncolors = ["red", "steelblue", "orange"]\n\nfor ii, (model, name) in enumerate(zip(models, names), 1):\n plt.subplot(4, 1, ii)\n plt.title(name)\n for sig, color in zip(model.T, colors):\n plt.plot(sig, color=color)\n\nplt.tight_layout()\nplt.show()
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment