직교 매칭 추구 (OMP) 를 이용한 희소 신호 복원

Beginner

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

소개

직교 매칭 추구 (OMP) 는 사전 (dictionary) 으로 인코딩된 잡음이 있는 측정값에서 희소 신호를 복구하는 방법입니다. 이 실험실에서는 scikit-learn 을 사용하여 잡음이 있는 측정값에서 희소 신호를 복구하기 위해 OMP 를 구현할 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 연습을 위해 Jupyter Notebook에 접속합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 가져오기

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

데이터 생성

n_components, n_features = 512, 100
n_nonzero_coefs = 17

## 데이터 생성

## 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()

## 깨끗한 신호를 왜곡
y_noisy = y + 0.05 * np.random.randn(len(y))

희소 신호 시각화

plt.figure(figsize=(7, 7))
plt.subplot(4, 1, 1)
plt.xlim(0, 512)
plt.title("희소 신호")
plt.stem(idx, w[idx])

노이즈가 없는 재구성 시각화

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("노이즈가 없는 측정값으로부터 복원된 신호")
plt.stem(idx_r, coef[idx_r])

노이즈가 있는 재구성 시각화

omp.fit(X, y_noisy)
coef = omp.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 3)
plt.xlim(0, 512)
plt.title("노이즈가 있는 측정값으로부터 복원된 신호")
plt.stem(idx_r, coef[idx_r])

교차검증 (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("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("직교 매칭 추구 (OMP) 를 이용한 희소 신호 복원", fontsize=16)
plt.show()

요약

이 실험에서 우리는 사전 (dictionary) 으로 인코딩된 노이즈가 있는 측정값으로부터 희소 신호를 복원하기 위해 직교 매칭 추구 (OMP) 를 사용하는 방법을 배웠습니다. Scikit-learn 을 사용하여 OMP 를 구현하고 희소 부호화된 신호를 생성했습니다. 또한 희소 신호, 노이즈가 없는 재구성, 노이즈가 있는 재구성, 그리고 CV 에 의해 설정된 0 이 아닌 수가 있는 노이즈가 있는 재구성을 플롯했습니다.