IT/AI-ML

주성분분석(PCA: Principal component analysis) 개념

Millennials 2021. 7. 28. 00:08

주성분분석PCA 개요

머신러닝에서 "차원축소" 방법으로 쓰이는 기법이다.
"차원축소"는 여러개의 특성(Feature)를 가지고 있는 고차원 데이터를 저차원 데이터로 줄이는 것을 말한다.
모델의 성능을 강화시키고, 통계적으로는 적은 수의 특징만으로 특정 현상을 설명할 수 있게 된다.
"차원축소" 방법에는 2가지 방법이 있는데, Feature Selection 과 Feature Extraction 이며 PCA는 후자에 속한다.

PCA는 특성(Feature)들 간의 분산-공분산 관계를 이용하여, 특성들의 선형결합(linear combination)으로 표시되는 주성분(Principal Component)을 찾는다. 주성분이라 함은 그 선형결합 방향으로 데이터들의 분산이 가장 큰 방향벡터를 의미한다. 즉 PCA로 찾은 주성분(PC1)은 원 데이터의 분산을 최대한 보존하여(=데이터가 가장 많이 흩뿌려져 있는) 분산이 큰 기저이다. 그리고 주성분(PC1)에 수직이면서 다음으로 분산이 큰 방향벡터를 PC2로 나타내며, 보통 이 PC1과 PC2를 2차원 데이터셋으로 많이 사용한다.

분홍색 선이 PC1이다.

 

주성분분석PCA 절차

  1. 기존 데이터 xx의 공분산행렬 계산
  2. 공분산행렬의 고유값과 고유벡터 계산
  3. 고유값의 크기 순서대로 고유벡터를 나열
  4. 정렬된 고유벡터 가운데 일부 선택
  5. 해당 고유벡터와 XX 내적
이 절차들에 대하여 통계적, 선형대수학적으로 증명하는 과정은 차차 공부해도 무방할 것이다.
어차피 PCA 계산은 sklearn라이브러리가 돌려줄 것이다.
지금은 공분산행렬, 고유벡터 와 PCA가 어떻게 연결되는지 용어만 조금 집고 넘어가자


주성분(PC1)의 분산 = 공분산행렬의 가장 큰 고유값
주성분 행렬 = 기존데이터행렬 * 공분산 행렬의 고유벡터 

 

주성분분석PCA sklearn 라이브러리 함수

from sklearn.preprocessing import StandardScaler, Normalizer
from sklearn.decomposition import PCA

#데이터셋 정규화 
scaler = StandardScaler()
Z = scaler.fit_transform(X)

# PC1과 PC2 2차원 주성분분석
pca = PCA(2)

# 데이터셋Z 분산 공분산 계산 
pca.fit(Z)

# 고유벡터 : PC1, PC2
print("\n Eigenvectors: \n", pca.components_)
# 고유값
print("\n Eigenvalues: \n",pca.explained_variance_)

# PC 매트릭스 계산 = 데이터셋 매트릭스Z * 고유값
B = pca.transform(Z)
print("\n Projected Data: \n", B)

 

refer)

https://ratsgo.github.io/machine%20learning/2017/04/24/PCA/

 

주성분분석(Principal Component Analysis) · ratsgo's blog

이번 글에서는 차원축소(dimensionality reduction)와 변수추출(feature extraction) 기법으로 널리 쓰이고 있는 주성분분석(Principal Component Analysis)에 대해 살펴보도록 하겠습니다. 이번 글은 고려대 강필성

ratsgo.github.io

https://rpubs.com/Evan_Jung/pca

 

RPubs - PCA(Principal component analysis) 분석 예제

 

rpubs.com

 

반응형