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.