주성분 분석(Principal Component Analysis)은 예측 모형에 사용될 변수를 새롭게 만들거나 차원 축소를 통한 데이터 요약을 위해 많이 사용된다. Scikit-Learn(sklearn)에서는 PCA 객체를 이용하여 주성분 분석을 할 수 있다. 이번 포스팅에서는 PCA에 대한 사용법을 알아보고자 한다.
주성분 분석(Principal Component Analysis)에 대한 개념은 아래 포스팅에 정리해 두었으니 참고하면 된다.
37. 주성분 분석(Principal Component Analysis : PCA)에 대해서 알아보자 with Python
PCA 사용법 알아보기
주성분 분석을 위해 붓꽃 데이터 입력 변수들을 사용하고자 한다. 먼저 데이터를 불러온다.
from sklearn.datasets import load_iris
## 데이터 준비
iris = load_iris()
X = iris.data
PCA 객체는 n_components에 주성분 개수를 전달한다. 그러고 나서 fit 메서드를 이용하여 주성분 분석을 수행한다.
from sklearn.decomposition import PCA
pca = PCA(n_components=2).fit(X)
PCA 객체는 성분 벡터와 주성분 분산 등 주성분 분석 결과를 확인하기 위한 여러가지 속성과 메서드를 제공한다.
print('성분 벡터')
print(pca.components_)
print()
print('데이터 총 분산', np.sum(np.diag(pca.get_covariance())))
print('주성분의 분산', pca.explained_variance_)
print('분산 설명 비율', pca.explained_variance_ratio_)
성분 벡터는 n_components 만큼 출력되고 제1 성분 벡터는 (0.36, -0.08, 0.87, 0.36)이고 제2 성분 벡터는 (0.66, 0.73, -0.17, -0.08)임을 알 수 있다.
transform 메서드를 이용하면 주성분을 계산할 수 있다. transform에 2차원 배열로된 입력 데이터를 넣어주면 된다.
pc = pca.transform(X)## 주성분
print(pc)
[[-2.68412563 0.31939725]
[-2.71414169 -0.17700123]
[-2.88899057 -0.14494943]
[-2.74534286 -0.31829898]
[-2.72871654 0.32675451]
''' 중략 '''
[ 1.94410979 0.1875323 ]
[ 1.52716661 -0.37531698]
[ 1.76434572 0.07885885]
[ 1.90094161 0.11662796]
[ 1.39018886 -0.28266094]]
위 결과에서 하나의 칼럼이 주성분 벡터가 된다.
반대로 inverse_transform에 주성분 벡터를 넣어주면 원 데이터로 변환된다.
inverse_pc = pca.inverse_transform(pc)
print(inverse_pc) ## 주성분을 원 데이터로 변환
[[5.08303897 3.51741393 1.40321372 0.21353169]
[4.7462619 3.15749994 1.46356177 0.24024592]
[4.70411871 3.1956816 1.30821697 0.17518015]
[4.6422117 3.05696697 1.46132981 0.23973218]
[5.07175511 3.52655486 1.36373845 0.19699991]
''' 중략 '''
[6.66904015 3.02994114 5.39094874 1.88173174]
[6.14880195 2.65421139 5.13134845 1.77482994]
[6.53272206 2.96578609 5.25579114 1.825527 ]
[6.60688475 2.98181821 5.3662607 1.87161698]
[6.16013695 2.73344296 4.99793961 1.71875852]]
코드를 실행하면 위와 같이 원 데이터로 변환된다. 하지만 실제 데이터와 약간의 차이가 발생한다.
댓글