주성분 분석(Principal Component Analysis)은 예측 모형에 사용될 변수를 새롭게 만들거나 차원 축소를 통한 데이터 요약을 위해 많이 사용된다. Scikit-Learn(sklearn)에서는 PCA 객체를 이용하여 주성분 분석을 할 수 있다. 이번 포스팅에서는 PCA에 대한 사용법을 알아보고자 한다.
주성분 분석(Principal Component Analysis)에 대한 개념은 아래 포스팅에 정리해 두었으니 참고하면 된다.
37. 주성분 분석(Principal Component Analysis : PCA)에 대해서 알아보자 with Python
37. 주성분 분석(Principal Component Analysis : PCA)에 대해서 알아보자 with Python
이번 포스팅에서는 주성분 분석(Principal Component Analysis : PCA)에 대한 개념과 파이썬(Python)을 이용하여 구현하는 방법에 대해서 알아본다. - 목차 - 1. 주성분 분석이란? 2. 주성분 구하기 3. 파이썬
zephyrus1111.tistory.com
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]]
코드를 실행하면 위와 같이 원 데이터로 변환된다. 하지만 실제 데이터와 약간의 차이가 발생한다.
댓글