"\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.\n"
"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",
"metadata": {},
"source": [
"## Plot results\n\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"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()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.15"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
\ No newline at end of file
%% Cell type:code id: tags:
``` python
%matplotlibinline
```
%% 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.
fromsklearn.decompositionimportFastICA,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