Blind Source Separation

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab verwenden wir FastICA, um eine Blind Source Separation auf einem gemischten Signal durchzuführen. Blind Source Separation ist eine Technik, die verwendet wird, um gemischte Signale in ihre ursprünglichen unabhängigen Komponenten zu trennen. Dies ist in verschiedenen Bereichen wie Signalverarbeitung, Bildverarbeitung und Datenanalyse nützlich. Wir werden die scikit-learn-Bibliothek von Python verwenden, um ICA und PCA auf einem Beispielgemischten Signal durchzuführen.

Tipps für die virtuelle Maschine

Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/decomposition("Matrix Decomposition") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/decomposition -.-> lab-49161{{"Blind Source Separation"}} ml/sklearn -.-> lab-49161{{"Blind Source Separation"}} end

Beispiel-Daten generieren

Wir werden ein Beispielgemischtes Signal generieren, das aus drei unabhängigen Komponenten besteht. Wir werden Rauschen zum Signal hinzufügen und die Daten standardisieren. Wir werden auch eine Mischmatrix generieren, um unsere drei unabhängigen Komponenten zu mischen.

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 : sinusförmiges Signal
s2 = np.sign(np.sin(3 * time))  ## Signal 2 : Rechtecksignal
s3 = signal.sawtooth(2 * np.pi * time)  ## Signal 3: Sägezahnsignal

S = np.c_[s1, s2, s3]
S += 0.2 * np.random.normal(size=S.shape)  ## Rauschen hinzufügen

S /= S.std(axis=0)  ## Daten standardisieren
## Daten mischen
A = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]])  ## Mischmatrix
X = np.dot(S, A.T)  ## Beobachtungen generieren

ICA- und PCA-Modelle anpassen

Wir werden FastICA verwenden, um die unabhängigen Quellen zu schätzen. Anschließend berechnen wir PCA zum Vergleich.

from sklearn.decomposition import FastICA, PCA

## ICA berechnen
ica = FastICA(n_components=3, whiten="arbitrary-variance")
S_ = ica.fit_transform(X)  ## Signale rekonstruieren
A_ = ica.mixing_  ## Geschätzte Mischmatrix erhalten

## Wir können das ICA-Modell durch Rückführung der Entmischung `beweisen`.
assert np.allclose(X, np.dot(S_, A_.T) + ica.mean_)

## Zum Vergleich PCA berechnen
pca = PCA(n_components=3)
H = pca.fit_transform(X)  ## Signale basierend auf orthogonalen Komponenten rekonstruieren

Ergebnisse grafisch darstellen

Wir werden das ursprüngliche gemischte Signal, die ursprünglichen unabhängigen Quellen, die von ICA geschätzten Quellen und die von PCA geschätzten Quellen grafisch darstellen.

import matplotlib.pyplot as plt

plt.figure()

models = [X, S, S_, H]
names = [
    "Beobachtungen (gemischtes Signal)",
    "Wahre Quellen",
    "Durch ICA wiederhergestellte Signale",
    "Durch PCA wiederhergestellte Signale",
]
colors = ["rot", "stahlblau", "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()

Zusammenfassung

Wir haben erfolgreich eine Blind Source Separation auf einem gemischten Signal mit FastICA und PCA durchgeführt. Wir haben ein Beispielgemischtes Signal generiert, das aus drei unabhängigen Komponenten besteht, Rauschen hinzugefügt und die Daten standardisiert. Anschließend haben wir eine Mischmatrix generiert, um unsere unabhängigen Komponenten zu mischen. Wir haben FastICA verwendet, um die unabhängigen Quellen zu schätzen und PCA berechnet zum Vergleich. Schließlich haben wir das ursprüngliche gemischte Signal, die ursprünglichen unabhängigen Quellen, die von ICA geschätzten Quellen und die von PCA geschätzten Quellen grafisch dargestellt.