추천 게시물
파이썬 (Python) 독립 성분 분석 (ICA) 예제 코드
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
목차
파이썬으로 독립 성분 분석 (Independent component analysis, 이하 ICA)를 활용하여 독립 성분을 추출하는 예제 코드이다. 실행하기 전에 numpy, matplotlib, sklearn을 미리 설치 해야한다.
- pip install numpy
- pip install scikit-learn
- pip install numpy
아래는 파이썬 코드이다. 두 성분 X, Y가 서로 다른 비율로 조합되어 생성된 신호 A, B를 만들고, 두 신호를 fastICA로 분리하고 잘 분리가 되었는지 Plot으로 확인한다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import FastICA
# 샘플 데이터 생성
np.random.seed(0)
time = np.linspace(0, 1, 500)
X = np.sin(2 * np.pi * 7 * time) # X 성분 (주파수 7Hz)
Y = np.sin(2 * np.pi * 13 * time) # Y 성분 (주파수 13Hz)
# 실제 신호 A, B 생성
A = 0.5 * X + 0.2 * Y + 0.05
B = 0.1 * X + 0.4 * Y + 0.05
# 두 신호를 행렬로 만듭니다 (2 x N)
signals = np.c_[A, B]
# 독립 성분 분석 (ICA)
ica = FastICA(n_components=2)
components = ica.fit_transform(signals)
# 분리된 신호 플롯
plt.figure(figsize=(10, 10))
# Original A Signal
plt.subplot(4, 1, 1)
plt.plot(time, A, label='Original A Signal')
plt.legend()
plt.title('Original Signals and ICA Components')
# Original B Signal
plt.subplot(4, 1, 2)
plt.plot(time, B, label='Original B Signal')
plt.legend()
# ICA Components
plt.subplot(4, 1, 3)
plt.plot(time, components[:, 0], label='ICA Component 1')
plt.plot(time, components[:, 1], label='ICA Component 2')
plt.legend()
# Original X and Y vs. ICA Components
plt.subplot(4, 1, 4)
plt.plot(time, X, label='Original X Signal')
plt.plot(time, Y, label='Original Y Signal')
plt.plot(time, components[:, 0], '--', label='ICA Component 1 (Dashed)')
plt.plot(time, components[:, 1], '--', label='ICA Component 2 (Dashed)')
plt.legend()
plt.tight_layout()
plt.show()
# 상관계수 출력
corr_1_x = np.corrcoef(components[:, 0], X)[0, 1]
corr_1_y = np.corrcoef(components[:, 0], Y)[0, 1]
corr_2_x = np.corrcoef(components[:, 1], X)[0, 1]
corr_2_y = np.corrcoef(components[:, 1], Y)[0, 1]
print(f"ICA Component 1과 X 성분의 상관계수: {corr_1_x:.2f}")
print(f"ICA Component 1과 Y 성분의 상관계수: {corr_1_y:.2f}")
print(f"ICA Component 2과 X 성분의 상관계수: {corr_2_x:.2f}")
print(f"ICA Component 2과 Y 성분의 상관계수: {corr_2_y:.2f}")
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
댓글
댓글 쓰기