使用FastICA的盲源分离#

An example of estimating sources from noisy data.

独立成分分析(ICA) 用于估计给定有噪音测量的源。想象一下,3台乐器同时演奏,3个麦克风记录混合信号。ICA用于恢复来源,即。每种乐器演奏的内容。重要的是,PCA未能恢复我们的 instruments 因为相关信号反映非高斯过程。

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

生成示例数据#

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 : sinusoidal signal
s2 = np.sign(np.sin(3 * time))  # Signal 2 : square signal
s3 = signal.sawtooth(2 * np.pi * time)  # Signal 3: saw tooth signal

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

S /= S.std(axis=0)  # Standardize data
# Mix data
A = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]])  # Mixing matrix
X = np.dot(S, A.T)  # Generate observations

匹配ICA和PCA模型#

from sklearn.decomposition import PCA, FastICA

# Compute ICA
ica = FastICA(n_components=3, whiten="arbitrary-variance")
S_ = ica.fit_transform(X)  # Reconstruct signals
A_ = ica.mixing_  # Get estimated mixing matrix

# We can `prove` that the ICA model applies by reverting the unmixing.
assert np.allclose(X, np.dot(S_, A_.T) + ica.mean_)

# For comparison, compute PCA
pca = PCA(n_components=3)
H = pca.fit_transform(X)  # Reconstruct signals based on orthogonal components

图结果#

import matplotlib.pyplot as plt

plt.figure()

models = [X, S, S_, H]
names = [
    "Observations (mixed signal)",
    "True Sources",
    "ICA recovered signals",
    "PCA recovered signals",
]
colors = ["red", "steelblue", "orange"]

for ii, (model, name) in enumerate(zip(models, names), 1):
    plt.subplot(4, 1, ii)
    plt.title(name)
    for sig, color in zip(model.T, colors):
        plt.plot(sig, color=color)

plt.tight_layout()
plt.show()
Observations (mixed signal), True Sources, ICA recovered signals, PCA recovered signals

Total running time of the script: (0分0.290秒)

相关实例

2D点云上的FastICA

FastICA on 2D point clouds

正交匹配追踪

Orthogonal Matching Pursuit

核岭回归与高斯过程回归的比较

Comparison of kernel ridge and Gaussian process regression

高斯过程回归(GPT)估计数据噪音水平的能力

Ability of Gaussian process regression (GPR) to estimate data noise-level

Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io> _