Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере через JupyterLite или Binder.

Разделение слепых источников с помощью FastICA

Пример оценки источников по данным с шумом.

Анализ независимых компонент (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

Общее время выполнения скрипта: (0 минут 0.386 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_ica_blind_source_separation.ipynb

Download Python source code: plot_ica_blind_source_separation.py

Download zipped: plot_ica_blind_source_separation.zip

Связанные примеры

FastICA для двумерных облаков точек

Ортогональный жадный алгоритм

Сравнение гребневой регрессии с ядром и регрессии гауссовского процесса

Способность регрессии гауссовского процесса (GPR) оценивать уровень шума в данных

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/decomposition/plot_ica_blind_source_separation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API