Dünnes Signalrückgewinnung mit Orthogonaler Suchverfolgung

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

Orthogonal Matching Pursuit (OMP) ist eine Methode zur Rekonstruktion eines dünnen Signals aus einer rauschen Messung, die mit einem Wörterbuch codiert ist. In diesem Lab verwenden wir scikit-learn, um OMP zu implementieren und ein dünnes Signal aus einer rauschen Messung zu rekonstruieren.

VM-Tipps

Nachdem die VM gestartet 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.

Bibliotheken importieren

import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import OrthogonalMatchingPursuit
from sklearn.linear_model import OrthogonalMatchingPursuitCV
from sklearn.datasets import make_sparse_coded_signal

Die Daten generieren

n_components, n_features = 512, 100
n_nonzero_coefs = 17

## die Daten generieren

## y = Xw
## |x|_0 = n_nonzero_coefs

y, X, w = make_sparse_coded_signal(
    n_samples=1,
    n_components=n_components,
    n_features=n_features,
    n_nonzero_coefs=n_nonzero_coefs,
    random_state=0,
)
X = X.T

(idx,) = w.nonzero()

## das saubere Signal verfälschen
y_noisy = y + 0.05 * np.random.randn(len(y))

Zeichnen des dünnen Signals

plt.figure(figsize=(7, 7))
plt.subplot(4, 1, 1)
plt.xlim(0, 512)
plt.title("Dünnes Signal")
plt.stem(idx, w[idx])

Zeichnen der rekonstruierten rauchfreien Signale

omp = OrthogonalMatchingPursuit(n_nonzero_coefs=n_nonzero_coefs)
omp.fit(X, y)
coef = omp.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 2)
plt.xlim(0, 512)
plt.title("Rekonstruiertes Signal aus rauchfreien Messungen")
plt.stem(idx_r, coef[idx_r])

Zeichnen der rekonstruierten rauschenden Signale

omp.fit(X, y_noisy)
coef = omp.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 3)
plt.xlim(0, 512)
plt.title("Rekonstruiertes Signal aus rauschenden Messungen")
plt.stem(idx_r, coef[idx_r])

Zeichnen der rekonstruierten rauschenden Signale mit Anzahl der Nicht-Nullen, festgelegt durch Kreuzvalidierung (CV)

omp_cv = OrthogonalMatchingPursuitCV()
omp_cv.fit(X, y_noisy)
coef = omp_cv.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 4)
plt.xlim(0, 512)
plt.title("Rekonstruiertes Signal aus rauschenden Messungen mit CV")
plt.stem(idx_r, coef[idx_r])

plt.subplots_adjust(0.06, 0.04, 0.94, 0.90, 0.20, 0.38)
plt.suptitle("Dünnes Signalrückgewinnung mit Orthogonaler Suchverfolgung", fontsize=16)
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man die Orthogonale Suchverfolgung (Orthogonal Matching Pursuit, OMP) verwendet, um ein dünnes Signal aus einer rauschenden Messung, die mit einem Wörterbuch codiert ist, zu rekonstruieren. Wir haben scikit-learn verwendet, um OMP zu implementieren und ein dünn codiertes Signal zu generieren. Wir haben auch das dünne Signal, die rauchfreie Rekonstruktion, die rauschende Rekonstruktion und die rauschende Rekonstruktion mit der Anzahl der Nicht-Nullen, die durch Kreuzvalidierung (CV) festgelegt ist, geplottet.