1. 개요
PCA와 ICA모두Dimension reduction에 해당하는 기술이다.
1) PCA란
PCA(; Principal Component Analysis)는 기본적으로 unsupervised learning이며, 상관관계가 있는 다수의 변수로부터 상관관계가 없는 소수로 전체의 불규칙한 분포를 최대한 좋게 표현하는 주성분이라고 불리는 변수를 합성하는 다변량(다차원)분석 방법 중 하나이다. 데이터의 차원 감소를 위해 사용되고 있다. 주성분을 부여하는 변환은, 제 1 주성분의 분산을 최대화하여, 계속해서 주성분은 지금까지 정해진 주성분과 직교하는 구속조건 하에 분산을 최대화하는 것이 선택된다. 즉, 데이터가 정규분포를 따른다고 가정할 수 있을 때, 분포된 데이터들의 주성분를 찾을 때 데이터를 가장 잘 설명할 수 있는 축을 찾는 기법이다. PCA에서 주성분은 이 축을 의미하며 분산(Variation)이 최대가 되는 축이 데이터를 가장 잘 설명하는 축이다.
기초가 직행이므로, 아웃풋은 서로 상관 없는 데이터가 된다 (선형적인 관계는 없지만, ,비선형적인 관계는 있을지도 모른다).
https://datachemeng.com/principalcomponentanalysis/
2) ICA란
ICA(; Independent Component Analysis)는 다변량(다차원)의 신호를 복수의 가산적인 성분으로 분리하기 위한 계산 방법이다. 각 성분은 가우스를 적용하지 않은 신호로 서로 통계적으로 분리된 것으로 가정한다. 이것은 블라인드 원음 분리의 특수한 경우이다. 따라서 음성 분리에 주로 쓰인다.
데이터가 통계적으로 독립하여 정규분포를 따르지 않는다는 가정이 가능할 때, 독립성이 최대가 되는 방향으로 축을 얻는 방법이다. 아웃풋은 정규분포를 따르지 않는 데이터가 된다(선형적 관계도 비선형적인 관계도 아니다). 즉, 주성분을 이용한다는 점에서 PCA와 비슷하지만 데이터를 가장 잘 설명하는 축을 찾는 PCA와 달리 가장 독립적인 축을 찾는다. 이에 독립성(Independence)이 최대가 되는 벡터를 찾는다. 독립성은 ICA의 알고리즘에 의해 계산된다.
https://datachemeng.com/independentcomponentanalysis/
2. PCA와 ICA의 차이점(이미지)
수식에 관련된 차이점은 아래의 링크를 참고하길 바란다.
https://tips-memo.com/difference-pca-ica#PCAICA
3. PCA와 ICA를 python으로 구현
1) PCA
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
X = input_data #400(データ数)×300(時系列)データ
#PCAの実行
pca = PCA(n_components=20, random_state=0)#20個の基底(コンポネント)を作る
feature = pca.fit_transform(X)
PCA_comp = pca.components_ #基底行列
#0番目のデータを20個のコンポネントを用いて復元
plt.figure(figsize = (12, 2))
plt.plot(X[0], label="data")#0番目のデータ
plt.plot(np.dot(feature[0], PCA_comp).T, label="reconstruct")#復元した0番目のデータ
plt.legend()
2) ICA
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import FastICA
X = input_data #400(データ数)×300(時系列)データ
#ICAの実行
ICA = FastICA(n_components=20, random_state=0)#20個の基底(コンポネント)を作る
X_transformed = ICA.fit_transform(X)
A_ = ICA.mixing_.T #混合行列
#0番目のデータを20個のコンポネントを用いて復元
plt.figure(figsize = (12, 2))
plt.plot(X[0], label="data")#0番目のデータ
plt.plot(np.dot(X_transformed[0], A_), label="reconstruct")#復元した0番目のデータ
plt.legend()
한국어로 된 상세한 설명은 아래의 링크를 참조
https://wordbe.tistory.com/entry/Linear-Factor-Model-PCA-ICA-Sparse-coding-%EC%84%A4%EB%AA%85
참고자료
'IT > AI\ML' 카테고리의 다른 글
[논문] GAN ; CycleGAN (Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks) (2) | 2020.04.30 |
---|---|
[python] GAN; cGAN(conditional GAN) (2) | 2020.04.30 |
Manifold Learning(多様体学習)과 알고리즘 (0) | 2020.04.30 |
[python/Keras] GAN ; pix2pix (0) | 2020.04.28 |
[논문] GAN ; BigGAN (Large Scale GAN Training for High Fidelity Natural Image Synthesis) (0) | 2020.04.28 |