IT/AI\ML

[python] PCA와 ICA의 개요와 차이점

개발자 두더지 2020. 4. 30. 13:31
728x90

1. 개요

 PCA와 ICA모두Dimension reduction에 해당하는 기술이다.

1) PCA란

 PCA(; Principal Component Analysis)는 기본적으로 unsupervised learning이며, 상관관계가 있는 다수의 변수로부터 상관관계가 없는 소수로 전체의 불규칙한 분포를 최대한 좋게 표현하는 주성분이라고 불리는 변수를 합성하는 다변량(다차원)분석 방법 중 하나이다. 데이터의 차원 감소를 위해 사용되고 있다. 주성분을 부여하는 변환은, 제 1 주성분의 분산을 최대화하여, 계속해서 주성분은 지금까지 정해진 주성분과 직교하는 구속조건 하에 분산을 최대화하는 것이 선택된다. 즉, 데이터가 정규분포를 따른다고 가정할 수 있을 때, 분포된 데이터들의 주성분를 찾을 때 데이터를 가장 잘 설명할 수 있는 축을 찾는 기법이다.  PCA에서 주성분은 이 축을 의미하며 분산(Variation)이 최대가 되는 축이 데이터를 가장 잘 설명하는 축이다.

 기초가 직행이므로, 아웃풋은 서로 상관 없는 데이터가 된다 (선형적인 관계는 없지만, ,비선형적인 관계는 있을지도 모른다).

https://datachemeng.com/principalcomponentanalysis/

 

主成分分析(Principal Component Analysis, PCA)~データセットの見える化・可視化といったらまずはこれ!~

主成分分析(Principal Component Analysis, PCA)について、pdfとパワーポイントの資料を作成しました。データセットが与えられたときに、PCAで何ができるか、どのようにPCAを計算するかが説明されています。pd

datachemeng.com

2) ICA란

 ICA(; Independent Component Analysis)는 다변량(다차원)의 신호를 복수의 가산적인 성분으로 분리하기 위한 계산 방법이다. 각 성분은 가우스를 적용하지 않은 신호로 서로 통계적으로 분리된 것으로 가정한다.  이것은 블라인드 원음 분리의 특수한 경우이다. 따라서 음성 분리에 주로 쓰인다.

 데이터가 통계적으로 독립하여 정규분포를 따르지 않는다는 가정이 가능할 때, 독립성이 최대가 되는 방향으로 축을 얻는 방법이다. 아웃풋은 정규분포를 따르지 않는 데이터가 된다(선형적 관계도 비선형적인 관계도 아니다). 즉, 주성분을 이용한다는 점에서 PCA와 비슷하지만 데이터를 가장 잘 설명하는 축을 찾는 PCA와 달리 가장 독립적인 축을 찾는다. 이에 독립성(Independence)이 최대가 되는 벡터를 찾는다. 독립성은 ICA의 알고리즘에 의해 계산된다.

https://datachemeng.com/independentcomponentanalysis/

 

独立成分分析 (Independent Component Analysis, ICA) ~PCAの無相関より強力な ”独立” な成分を抽出~

よく、主成分分析(Principal Component Analysis, PCA) と比べられることが多い、独立成分分析 (Independent Component Analysis, ICA) についてです。PCA ではデータを低次

datachemeng.com

 

2. PCA와 ICA의 차이점(이미지)

 수식에 관련된 차이점은 아래의 링크를 참고하길 바란다.

https://tips-memo.com/difference-pca-ica#PCAICA

 

【ど素人向け】PCAとICAの違い〜NMFを添えて〜|Beginaid

この記事では,研究のサーベイをまとめていきたいと思います。ただし,全ての論文が網羅されている訳ではありません。また,分か

tips-memo.com

 

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

 

[Linear Factor Model] PCA, ICA, Sparse coding 설명

6. 선형 인자 모델(Linear Factor Model) 인자(factor)란 관측되지 않는 변수를 뜻합니다. z가 인자에 해당하며, 잠복변수(latent variable) 또는 은닉변수(hidden variable)이라고도 불립니다. 선형인자모델은 선..

wordbe.tistory.com


참고자료

https://m.blog.naver.com/PostView.nhn?blogId=dndusdndus21&logNo=220323666085&proxyReferer=https:%2F%2Fwww.google.com%2F

https://qiita.com/yuta-takahashi/items/c05908db9aebd1afa99f

728x90